JavaScript中哪个更快:使用整数索引循环数组或循环通过具有属性的对象?如果有的话,性能差异是什么?
var array = [1, 2, 3];
for (var i = 0; i < array.length; i++) {
}
与:相比:
var object = {"1":1, "2":2, "3":3};
for (var x in object) {
}
据我所知,JavaScript数组实际上是由地图支持的,所以我希望两者都能执行相同的操作。非常感谢任何信息!
编辑:我应该澄清一下,我对循环开销感兴趣(比如for in
更贵),以及访问每个元素的查询时间(object[x]
vs {{1} })。
答案 0 :(得分:3)
接受的答案使用了无效的基准,完全错误。正如评论所指出的那样console.log
将主宰测试结果,使它们无用。看看这个比较:http://jsperf.com/performance-of-array-vs-object/17
数组迭代比对象迭代快约48倍。如果您事先知道对象的键的范围,它会大大改善,但仍然比数组迭代慢得多。
答案 1 :(得分:0)
我创建了一个jsperf http://jsperf.com/array-vs-object-loop。
我认为额外的财产访问需要更多时间。在Chrome 24中它并没有太大的区别,在firefox 19中,对象方式需要5-10%的时间。
您可能还应该考虑对象/数组的大小。
编辑:忘记那个答案,看一下接受的答案!