循环对象属性vs数字索引数组
Loop object properties vs numerically indexed array
在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%。
你可能还应该考虑对象/数组的大小。
编辑:忘了那个答案吧,看看被接受的答案吧!相关文章:
- 是索引数组文字的好做法
- jQuery ajax请求,将索引数组作为关键字字符串
- Javascript中的名称索引-数组/对象
- 如何在对象中按值创建排序索引数组
- 提取索引数组中的整数值
- 来自 jsp 和 javascript 中的请求属性的对象索引数组
- 单击导航索引数组时发出双重警报
- 以编程方式声明基于索引数组的变量(使用谷歌网站列表页面)
- 索引数组 JavaScript 中索引的搜索值
- 根据值从索引数组中删除元素
- 如何检查名称索引数组中有多少个特定结果
- 从 JavaScript 数组中删除索引数组
- 创建一个索引数组,该数组的索引值为 JavaScript 中最常见的数组值
- JavaScript 如何用数组解释索引数组
- 在javascript中向索引数组添加超链接
- 非数字索引数组的长度
- JavaScript-偶数索引数组元素乘以2,奇数索引乘以3
- Javascript-使用索引数组访问数组的元素
- 从数组中删除索引数组
- 在javascript中用索引数组索引一个数组的数组