javascript中forEach和for循环的区别

新手上路,请多包涵

我想知道:JavaScript 中的 forEachfor 循环之间是否有任何显着差异。

考虑这个例子:

 var myArray = [1,2,3,4];

myArray.forEach(function(value) {
  console.log(value);
});

for (var i = 0; i < myArray.length; i++) {
  console.log(myArray[i]);
}

这是我研究的一部分:

  1. 性能:根据 JsPerf :forEach 比 for 循环慢一点。
  2. 可用性:在 forEach 循环的情况下,我们无法从回调中中断/返回。

例如:你想知道一个数是否是质数。我认为使用 for 循环比使用 forEach 循环更容易做到这一点。

  1. 可读性: 使用 for 循环使代码比在代码中使用 forEach 更具可读性。
  2. 浏览器兼容性:IE < 9 不支持 forEach 因此在我们的代码中引入了一些 shim。

我的问题是:

  1. forEach 比 for 循环有什么优势?
  2. 在什么场景下,forEach更可取。
  3. 为什么它甚至会出现在 JavaScript 中?为什么需要它?

原文由 Sachin Jain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 556
2 个回答

forEachArray 原型上的一个方法。它遍历数组的每个元素并将其传递给回调函数。

所以基本上, forEach 是用例 “将 array 的每个元素传递给 function 用例的简写方法。这是一个常见的例子,我认为 Array.forEachfor 循环相比非常有用:

 // shortcut for document.querySelectorAll
function $$(expr, con) {
    return Array.prototype.slice.call((con || document).querySelectorAll(expr));
}

// hide an element
function hide(el) {
    el.style.display = 'none';
}

// hide all divs via forEach
$$('div').forEach(hide);

// hide all divs via for
for (var divs = $$('div'), i = 0; i < divs.length; i++) {
    hide(divs[i])
}

如您所见,与 for 循环相比,forEach 语句的可读性有所提高。

另一方面, for 语句更灵活:它不一定涉及数组。正常的 for 循环的性能稍微好一些,因为没有对涉及的每个元素进行函数调用。尽管如此,建议避免 for 循环,因为它可以写成 forEach 语句。

原文由 Lea Rosema 发布,翻译遵循 CC BY-SA 3.0 许可协议

forEach 循环中,您无法控制遍历数组的方式。 The classic for loop allows you to choose the iteration algorithm as you want ( i++ ; i-- ; i+=2*i , etc).

然而,一个 forEach 循环更容易使用 - 你不需要弄乱所有 i 计数,找到 array[i] -S35 对象它给你。

原文由 naivists 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题