gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:11:18 25 4
gpt4 key购买 nike

之间有什么性能差异吗?
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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com