两者之间有性能差异吗
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 .
作为使用 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/