JavaScript:循环遍历数组

时间:2010-10-11 18:23:29

标签: javascript loops for-loop

认为循环JavaScript数组的最快方法是使用for-in循环会不会错? E.g:

for (var index in items) {
    ...
}

请参阅http://jsperf.com/loop-test2/2

4 个答案:

答案 0 :(得分:5)

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

此声明的目的是枚举对象属性。

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

  • 无法保证迭代的顺序,可能无法按数字顺序访问数组索引。
  • 还枚举了继承的属性。

要在数组上迭代始终推荐顺序循环。

推荐文章:

编辑:哦,我也忘了提到your test 完全偏向,因为表达式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
//...

尝试this fair test,使用真正包含10000个元素的数组对象,您会感到惊讶。 :)

答案 1 :(得分:2)

是的,可以最快,但它不安全而不是for-in循环的目的......所以这真的是一个没有实际意义的点。

快速的东西在它是正确的之前不是一个问题:)

例如在IE中测试:http://jsfiddle.net/nick_craver/z52gx/您会注意到订单不正确。

答案 2 :(得分:1)

它是否最快是依赖于实现的。考虑到每个主要的浏览器供应商都有他们自己的实现,加上一个移动实现,加上仍在使用的所有旧浏览器和演示下一代javascript引擎的beta浏览器......那里“只有”大约30种不同的javascript实现现在。即使目前所有或大多数都是最快的,javascript引擎仍然在快速发展。

这甚至假设javascript是你的瓶颈。这里有一个提示 - 与javascript一样慢,它很少 是页面呈现的瓶颈。互联网传输速度和服务器响应时间往往是更重要的因素。

首先编码正确性可能是个更好的主意。

答案 3 :(得分:1)

这有点过时(仅包括FF3.0和IE8b),但它非常全面。

http://blogs.oracle.com/greimer/entry/best_way_to_code_a

使用简化条件的循环反向查看速度最快:
var len; while(len--){}