Инструкция for-in
не должна использоваться для итерации над массивом или элементами, похожими на массивы.
Цель этого оператора для перечисления свойств объекта.
Его нельзя использовать для объектов, подобных массиву, поскольку:
- Порядок итерации не гарантирован, индексы массива могут не посещаться в числовом порядке.
- Перечисляются также унаследованные свойства.
До итерация по массиву, рекомендуется последовательный цикл всегда .
Рекомендуемая статья:
Редактировать: О, также я забыл упомянуть, что вашtest является полностью смещенным , поскольку выражение new Array(10000)
просто инициализирует объект Array с 10000
в качестве значения свойства length
, числовые свойства index donдаже не существует, поэтому кажется самым быстрым, например:
var a = new Array(10);
a.length; // 10
a.hasOwnProperty('0'); // false, the indexes don't even exist!
a.hasOwnProperty('1'); // false
//...
Попробуйте это честный тест , с объектом массива, который действительно содержит 10000 элементов, и вы будете удивлены.:)