【问题标题】:Iteration in JavaScript [duplicate]JavaScript中的迭代[重复]
【发布时间】:2016-07-15 07:37:03
【问题描述】:

This MDN page 声明:

...您可以使用以下方法遍历数组:

for (var i = 0; i < a.length; i++) {
  // Do something with a[i]
}

当您正在查找长度属性时,这有点低效 每个循环一次。一个改进是这样的:

for (var i = 0, len = a.length; i < len; i++) {
  // Do something with a[i]
}

一个更好看但有限的成语是:

for (var i = 0, item; item = a[i++];) {
  // Do something with item
}

这些真的是普遍接受的迭代方式吗?现代 JavaScript 引擎不会简单地优化第一个吗?

【问题讨论】:

  • 现代 JavaScript 引擎不会简单地优化第一个引擎吗? 是的,他们会的。 MDN 页面错误。请记住,MDN 是由像我和你这样的普通人编写的。顺便说一句,最后一个片段很可怕,因为它会在任何非虚假数组元素上停止循环。我已经修复了 MDN 页面。
  • 一般来说,不要做奇怪的事情,因为它们“更快”。编写明显的代码。编译器编写者将花费更多时间优化明显的代码以加快速度,维护开发人员将更容易理解您正在尝试做什么。只有当你可以证明它对用户来说明显更快,而不是对某些基准测试明显更快时,才进行奇怪的扭曲。
  • 当然;我很困惑,因为我认为 MDN 是一个权威来源,并且在许多示例中也使用了第二种方法。

标签: javascript


【解决方案1】:

MDN 页面不正确。现代引擎将优化长度处理。事实上,一些引擎实际上会更快地运行第一个片段。

【讨论】:

    猜你喜欢
    • 2014-04-16
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2011-06-18
    • 2019-06-18
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多