为
for
循环的效率要高得多。它是一种循环构造,专门设计用于在条件为真时进行迭代,同时提供步进机制(通常用于增加迭代器)。例:
for (var i=0, n=arr.length; i < n; ++i ) {
...
}
这并不是说 for 循环总是更有效率,只是 JS 引擎和浏览器已经优化了它们。多年来,关于哪种循环构造更有效(对于,同时,reduce,reverse-while等)已经存在一些妥协 - 不同的浏览器和JS引擎有自己的实现,提供不同的方法来产生相同的结果。随着浏览器进一步优化以满足性能需求,理论上可以以更快或与.[].forEach
for
好处:
- 有效
- 早期环路终止(荣誉和
break
continue
)
- 条件控制(可以是任何东西,不受数组大小的限制)
i<n
- 变量作用域(循环结束后剩余可用)
var i
i
forEach
.forEach
是主要迭代数组(也循环访问其他可枚举,如 和 对象)的方法。它们更新,并提供主观上更易于阅读的代码。例:Map
Set
[].forEach((val, index)=>{
...
});
好处:
- 不涉及变量设置(迭代数组的每个元素)
- 函数/箭头函数将变量的作用域限定为块
在上面的示例中,将是新创建的函数的参数。因此,在循环之前调用的任何变量都将在循环结束后保留其值。val
val
- 主观上更易于维护,因为它可能更容易识别代码正在做什么 - 它正在迭代可枚举;而 for 循环可用于任意数量的循环方案
性能
性能是一个棘手的话题,当涉及到深思或方法时,通常需要一些经验。为了提前确定(在开发过程中)可能需要多少优化,程序员必须对过去的问题案例经验有很好的了解,以及对潜在解决方案有很好的理解。
在某些情况下使用jQuery有时可能太慢(有经验的开发人员可能知道这一点),而其他时候可能不是问题,在这种情况下,库的跨浏览器合规性和执行其他功能(例如,AJAX,事件处理)的易用性将值得节省开发(和维护)时间。
另一个例子是,如果性能和优化是一切,那么除了机器或汇编之外,没有其他代码。显然情况并非如此,因为有许多不同的高级和低级语言,每种语言都有自己的权衡。这些权衡包括但不限于专业化,开发易用性和速度,维护易用性和速度,优化代码,无错误代码等。
方法
如果您不太了解某些内容是否需要优化的代码,那么首先编写可维护的代码通常是一个很好的经验法则。从那里,您可以测试并确定需要更多关注的内容。
也就是说,某些明显的优化应该是一般实践的一部分,不需要任何思考。例如,请考虑以下循环:
for (var i=0; i < arr.length; ++i ){}
对于循环的每次迭代,JavaScript 都会在每个周期检索 ,一个键查找成本计算操作。没有理由不这样做:arr.length
for (var i=0, n=arr.length; i < n; ++i){}
这执行相同的操作,但只检索一次,即缓存变量并优化代码。arr.length