Действительно ли чтение свойства массива `length` - это такая дорогостоящая операция в JavaScript?

Я всегда считал, что кэширование длины массива в JavaScript - это хорошая идея (особенно в условиях цикла for ) из-за дороговизны вычисления длины массива.

Пример

for (var i = 0; i < arr.length; i++) { }

// vs

for (var i = 0, arrLength = arr.length; i < arrLength; i++) { }

Однако я подумал, что, возможно, свойство length обновляется только при создании и изменении массива. Следовательно, его чтение не должно быть слишком затратной операцией, в отличие от чтения, хранящегося в переменной (в отличие от других методов на других языках, которым может потребоваться поиск в памяти, чтобы найти конец чего-либо, например strlen ( ) в C).

У меня два вопроса. Меня также интересует, как это работает, поэтому, пожалуйста, не ударяйте меня палкой преждевременной оптимизации .

Предположим, что в браузерах используются движки JavaScript.

  1. Есть ли преимущества в кэшировании свойства length массива в JavaScript? Есть ли что-то большее, чем требуется для чтения локальной переменной свойства объекта?
  2. Изменяется ли свойство length просто при создании и при shift () и pop () методы типа, которые не возвращают новый массив и в противном случае просто хранятся как целое число?
65
задан alex 22 April 2011 в 06:53
поделиться