JavaScript:循环遍历数组

Sni*_*ave 0 javascript loops for-loop

如果认为循环JavaScript数组的最快方法是使用for-in循环,那会不会错?例如:

for (var index in items) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

http://jsperf.com/loop-test2/2

CMS*_*CMS 5

for-in语句不应用于迭代数组或类数组元素.

此语句的目的是枚举对象属性.

它不应该用于类似数组的对象,因为:

  • 不保证迭代的顺序,可能不会以数字顺序访问数组索引.
  • 还枚举了继承的属性.

迭代数组,始终建议使用顺序循环.

推荐文章:

编辑:哦,我也忘了提到你的测试完全偏向的,因为表达式new Array(10000)只是初始化一个Array对象10000作为length属性的值,数字索引属性甚至不存在,这就是为什么它似乎是最快的例如:

var a = new Array(10);
a.length; // 10
a.hasOwnProperty('0'); // false, the indexes don't even exist!
a.hasOwnProperty('1'); // false
//...
Run Code Online (Sandbox Code Playgroud)

尝试这个公平的测试,一个真正包含10000个元素的数组对象,你会感到惊讶.:)