【问题标题】:What are the pros/cons of iterating an array with Array.prototype.forEach() versus for() in Javascript在 Javascript 中使用 Array.prototype.forEach() 与 for() 迭代数组的优缺点是什么
【发布时间】:2013-09-17 09:40:54
【问题描述】:

【问题讨论】:

标签: javascript arrays for-loop foreach


【解决方案1】:

forEach 有时看起来更好,可以避免中间变量和闭包问题。

for 更快,适用于非数组,默认维护this,并且一直是 JavaScript 的一部分。你也可以用break; 打破它——甚至是嵌套的。

在 ES6 中,forEachthis-maintaining 和外观通过引入 => 得到了改进; for 的冗长和有时不直观的范围通过 letfor of 循环得到改善。

正如 6502 所回答的,它们在稀疏数组上的工作方式不同。
不要使用稀疏数组。

【讨论】:

    【解决方案2】:

    如果你打算使用任何 polyfills/shims 为旧版浏览器提供原型功能,请注意 Array.prototype.forEach()(我在看着你,InternetExplorer)。

    例如,toString() 方法不适用于旧版本 IE 中的数组。我有一个 polyfill,它将 toString() 方法添加到 Array.prototype 中,以便我的应用程序可以在旧版浏览器中运行。但是,使用 .forEach() 迭代器进行迭代除了迭代数组的内容外,还可以访问(并且确实会迭代)该方法。

    不过,一般来说,for 要快得多。如果有 JSON 对象你想循环,forEach 是天赐之物。

    【讨论】:

      【解决方案3】:

      他们做了两件非常不同的事情:

      1. for (var i=0; i<L.length; i++) { ... } 遍历所有索引,包括“未定义”的数组元素。
      2. forEach 仅对已定义的元素进行迭代。

      还要注意,“未定义”并不仅仅意味着元素的 undefined,还意味着该元素从未设置过,两者是非常不同的东西:

      a = [];
      a[3] = 9;
      a.indexOf(undefined) // --> -1
      a[1] = undefined;
      a.indexOf(undefined) // --> 1
      

      这样你就可以定义一个值为undefined的元素...

      a = [];
      a[9] = 9;
      a[3] = undefined;
      
      a.forEach(function(){ console.log(arguments); });
      

      将显示两行,一行用于索引为 9 的元素,另一行用于索引为 3 的元素

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 2010-12-03
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 2014-04-08
        • 1970-01-01
        • 2016-03-26
        • 1970-01-01
        相关资源
        最近更新 更多