【发布时间】:2018-09-23 09:02:53
【问题描述】:
编写 JavaScript for 循环的最佳实践是什么?
我一开始是这样写的:
for(var i = 0; i < array.length; i++){
//do stuff
}
但是后来发现每次pass计算长度并不理想,所以应该更像:
var len = array.length;
for(var i = 0; i < len; i++){
//do stuff
}
但是如果你减少而不是增加循环会更快:
var lenArr = array.length - 1;
for(var len = lenArr; len > 0; len--){
//do stuff
}
但是,如果您只想中断一组嵌套循环中的一个循环,则这种循环实际上并不奏效,因此您应该养成使用标签的习惯:
var lenArr = array.length - 1;
var lenArr2 = array2.length - 1;
loop1: for(var len = lenArr; len > 0; len--){
loop2: for(var len2 = lenArr2; len2 > 0; len2--){
//do stuff
break loop2;
}
}
是否还有其他需要更改的地方,或者这是在 JavaScript 中编写 for 循环的最佳做法?
【问题讨论】:
-
最佳实践 IMO 是尽可能完全避免
for循环 - 与数组方法不同,它们需要手动迭代,没有任何抽象,当新手开发人员使用var时会出现提升问题,以及不可组合。除了速度之外,Array 方法在各个方面都更好,而且速度很少需要担心,除非您正在编写库。但这是基于意见的。 -
您可以使用jsperf.com 编写测试以相互运行这些不同的场景以检查它们的性能。有时结果会让您感到惊讶,浏览器制造商会优化某些路径,使其比其他路径更快。
-
break loop2;... 看起来很糟糕的代码 -
我做的很快,但无论如何,在 Chrome 中,[for 循环仍然胜过 forEach](jsperf.com/for-vs-foreach-anied/1)。也就是说,性能是其中的一部分——如果你的数据集很小并且性能不是关键因素,你可能会在规模上更重地衡量可读性......
-
如果你想要速度......并且你正在处理大型数组......不要在 Chrome 或 Edge(forEach 等)中使用数组原生方法 - 它们的速度慢得令人麻木 - 93% 和分别慢 98%!! (与好的浏览器相比,差异更像是 3%)
标签: javascript loops for-loop