Хотя массивы являются объектами в JavaScript, не рекомендуется использовать A для цикла для прохождения массива. На самом деле, есть много причин, чтобы не дать нам использовать для массивов для массивов.
Поскольку цикл для IN будет перечислять все свойства в цепочке прототипов, и единственный способ предотвратить его использование HasownProperty для судьи, что будет намного медленнее, чем нормальное для цикла.
Прохождение
Для оптимальной производительности, чтобы пройти массив, лучший способ - использовать классику для цикла.
Кода -копия выглядит следующим образом:
var list = [1, 2, 3, 4, 5, ...... 10000000000];
для (var i = 0, l = list.length; i <l; i ++) {
console.log (list [i]);
}
Здесь есть дополнительный трюк, который должен кэшировать длину массива с помощью l = list.length.
Хотя длина свойства определена в самом массиве, при каждом обходе петли все еще есть накладные расходы. Хотя последние двигатели JavaScript, возможно, выполнили оптимизацию производительности для этой ситуации, вы не можете гарантировать, что ваш код JavaScript всегда будет работать в этом браузере.
На самом деле, петли без длины кеша намного медленнее, чем петли с длиной кэша.
Атрибут длины
Хотя атрибут длины возвращает только количество элементов в массиве с помощью метода Getter, массив может быть усечен методом сеттера.
Кода -копия выглядит следующим образом:
var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
foo; // [1, 2, 3]
foo.length = 6;
foo.push (4);
foo; // [1, 2, 3, неопределенная, неопределенная, неопределенная, 4]
Присвоение меньшего числа атрибуту длины усекнет массив, и, если назначить большее число, он не усекнет массив.
Суммировать
Для оптимальной производительности рекомендуется использовать для петли вместо цикла в цикле при кэшировании атрибута длины.
Существуют также объекты массива, которые не имеют метода, только уникальная длина атрибута. Строковые объекты имеют методы длины ~~