javascript - 为什么循环数组时 for..in 比 for 循环更快

标签 javascript arrays performance for-loop

我一直想知道 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/

相关文章:

javascript - 将 JSON 字符串转换为 Angular 函数?

javascript - 从下拉菜单中选择元素

c++ - 数组引用速度与按位运算符

c++ - 在 C++ 循环中,重用大型数据结构并重置内容或分配新内容,哪个更快?

javascript - 在我的 html 中包含 event.keycode == 13 后 &lt;textarea&gt; 换行不起作用

javascript - 基于选择菜单使用 jQuery 更改 iFrame src

ruby-on-rails - 序列化时无法将空数组保存到数据库

c++ - 动态数组的时间复杂度

c++ - 如何初始化数组 vector

javascript - CSS Sprite 性能