javascript - 在javascript中迭代数组时,for循环和for..in循环之间的性能差异?

标签 javascript performance

两者之间有性能差异吗

var a = [10,20,30,40];// Assume we have thousands of values here

// Approach 1
var i, len = a.length;
for(i=0;i<len;i++){
  alert(i);
  alert(a[i]);
}

// Approach 2   
for( i in a ){
  alert(i);
  alert(a[i]);
}

最佳答案

使用for (var i = 0, len = a.length; i < len; i++)因为它更快,并且是迭代数组中的项目的正确方法。

第一:使用 for (i in a) 迭代数组是不正确的因为除了数组元素之外,该迭代还将包括可枚举属性。如果任何方法或属性已添加到数组中,则在使用 for (i in a) 时它们将成为迭代的一部分当尝试遍历数组的元素时,这绝不是您想要的。

第二:正确的选项要快得多(快 9-20 倍)。请参阅此 jsPerf 测试,其中显示 for (var i = 0; i < len; i++)选项在 Chrome 中速度提高约 9 倍,在 Firefox 中速度差异甚至更大:http://jsperf.com/for-loop-comparison2 .

enter image description here

作为使用 for (var i in a) 时可能出现的问题的示例,当我在项目中包含 mootools 库时使用它时,我得到了 i 的所有这些值。 :

0
1
2
3
$family
$constructor
each
clone
clean
invoke
associate
link
contains
append
getLast
getRandom
include
combine
erase
empty
flatten
pick
hexToRgb
rgbToHex

这似乎是 mootools 添加到数组对象中的一堆方法。

关于javascript - 在javascript中迭代数组时,for循环和for..in循环之间的性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9640949/

相关文章:

javascript - 将图像从移动网络应用程序(PhoneGap 和 JavaScript)上传到 SOAP 网络服务返回状态 0

javascript - 检查对象可能是 'null' 或 'undefined'

JavaScript 枚举对象 - 使用字符串或数字更快?

mysql - 如何以最有效的方式跟踪观看次数?

javascript - 在 NodeJS CLI 应用程序中将参数传递给可执行文件

javascript - Typescript:放大或缩小接收对象?

c++ - 快速访问矩阵

C# 为什么使用实例方法作为委托(delegate)分配 GC0 临时对象但比缓存委托(delegate)快 10%

javascript - 通过 jQuery 设置元素的 onclick 处理程序时如何获取变量的文字值?

performance - 如何比较两个数据结构的运行时间