【发布时间】: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