循环对象属性vs数字索引数组

Loop object properties vs numerically indexed array

本文关键字:索引 数组 数字 vs 对象 属性 循环      更新时间:2023-09-26

在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 array[i])。

接受的答案使用了无效的基准,完全错误。正如评论所指出的,console.log将主导测试结果,使它们无用。看看这个比较:http://jsperf.com/performance-of-array-vs-object/17

数组迭代比对象迭代快约48倍。如果您提前知道对象的键的范围,它会大大改善,但仍然比数组迭代慢得多。

我创建了一个jsperf http://jsperf.com/array-vs-object-loop.

我认为额外的属性访问需要更多的时间。在chrome 24中,这没有太大的区别,在firefox 19中,对象方式需要长5-10%。

你可能还应该考虑对象/数组的大小。

编辑:忘了那个答案吧,看看被接受的答案吧!