【问题标题】:Should I be using the for-loop construct or the forEach method for iteration?我应该使用 for-loop 构造还是 forEach 方法进行迭代?
【发布时间】:2011-03-03 18:17:11
【问题描述】:

一种方法更有效吗?一种方法与另一种方法相比是否有任何限制?感谢你们可以给我的任何意见;-)

【问题讨论】:

    标签: javascript


    【解决方案1】:

    Array.prototype.forEach 方法是 ECMAScript 第 5 版规范的一部分,在 all browsers 上可用,但在 IE 中不可用。

    我建议您使用简单的顺序for 循环,IMO 效率更高,因为forEach 需要回调函数,将创建一个函数以启动闭包,您无需关心 IE。

    但如果您想使用forEach 和所有其他新的Array.prototype 方法,例如mapfiltereverysome 等...您可以为 IE 添加一个实现,在我链接的页面中。

    【讨论】:

    • 请注意:到目前为止,forEach 在 Opera 和 Chrome 上的效率更高。
    • 我发现forEach在火狐上快如闪电,我做了一个简单的performance test,欢迎play with it
    【解决方案2】:

    类似于 for each 但在所有浏览器中都支持

    for (var i = 0, myArrayElement; myArrayElement = myArray[i]; i++) { 
       //now you can just use 
      // myArrayElement
      // instead of 
      // myArray[i]
    }
    

    请注意,我在遍历表单集合(即 document.forms[0].elements)时使用它

    【讨论】:

    • 请注意,如果数组元素值为 falsy (0, null, undefined, NaN, an空字符串,当然还有false)。试试var myArray = [0, 1, 2];
    • 好点CMS。请注意,我在遍历表单集合(即 document.forms[0].elements)时使用它
    • 您应该在主要回复中保留您刚刚发表的评论。然后我们可以 +1 你。
    • for (var x,i=0; x=data[i++];) {...} 是这样做的另一种方式,但它仍然存在“虚假”问题。另请参阅stackoverflow.com/questions/2971698/…,有关如何在不要求评估为 true 的项目的情况下执行此操作的示例,请参阅 #7,尽管它非常混乱 :-)
    猜你喜欢
    • 2014-04-27
    • 2014-04-27
    • 2021-08-18
    • 2013-06-21
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    相关资源
    最近更新 更多