我一直想知道 for
循环或 for..in
循环在数组上的位置会更远。
我已经使用 jsperf 对此进行了测试。
我的 For
循环有 16,676,377 次操作
而 for..in
只有 519,853 op/s
为什么是:
var a = ["hi", "hi2", "bye", "bye2"];
for (var i in a) {
return a[i];
}
慢于:
var a = ["hi", "hi2", "bye", "bye2"];
for (var i = 0; i < a.length; i++) {
return a[i];
}
最佳答案
您的问题的答案很简单:for in 循环不是为了处理数组而创建的,它还执行其他操作,因此不应使用。
for-in 语句的主要目的是迭代思想对象的属性,而不是通过数组。这个语句也会进入数组原型(prototype)链,通过继承的属性进行迭代,我认为你不需要这个,甚至不知道这个。
另一个有趣的事情是你甚至不知道它会以什么顺序迭代。
所以要记住的主要事情 - 不要将 for in 与数组一起使用。仅适用于对象。
P.S 作为 RobG 正确添加:
A for loop will search for properties on the [[Prototype]] chain too if they aren't found on the array. E.g. a for loop over [0,,2] will search for 1 all the way to Object.prototype[[Prototype]]
关于javascript - 为什么循环数组时 for..in 比 for 循环更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283720/