认为循环JavaScript数组的最快方法是使用for-in循环会不会错? E.g:
for (var index in items) {
...
}
答案 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--){}