1

在 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 数组实际上是由映射支持的,所以我希望两者都执行相同的操作。非常感谢任何信息!

编辑:我可能应该澄清我对循环开销(比如 iffor in更昂贵)以及访问每个元素(object[x]vs array[i])的查找时间感兴趣。

4

2 回答 2

3

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

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

于 2014-10-31T06:18:44.413 回答
0

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

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

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

编辑:忘记那个答案,看看接受的答案!

于 2013-02-27T21:01:47.473 回答