我从书中学到,你应该这样写for循环:
for(var i=0, len=arr.length; i < len; i++){
// blah blah
}
所以arr。每次不计算长度。
其他人说编译器会做一些优化,所以你可以这样写:
for(var i=0; i < arr.length; i++){
// blah blah
}
我只是想知道在实践中哪种方法是最好的?
我从书中学到,你应该这样写for循环:
for(var i=0, len=arr.length; i < len; i++){
// blah blah
}
所以arr。每次不计算长度。
其他人说编译器会做一些优化,所以你可以这样写:
for(var i=0; i < arr.length; i++){
// blah blah
}
我只是想知道在实践中哪种方法是最好的?
当前回答
在使用大多数现代浏览器执行此测试后: https://jsben.ch/wY5fo
目前,最快的循环形式(在我看来也是语法上最明显的)。
具有长度缓存的标准for循环
var i = 0, len = myArray.length;
while (i < len) {
// your code
i++
}
我想说,这绝对是我为JavaScript引擎开发者喝彩的地方。运行时应该优化为清晰,而不是聪明。
其他回答
试试这个:
var myarray =[],
i = myarray.lenght;
while(i--){
// do somthing
}
在使用大多数现代浏览器执行此测试后: https://jsben.ch/wY5fo
目前,最快的循环形式(在我看来也是语法上最明显的)。
具有长度缓存的标准for循环
var i = 0, len = myArray.length;
while (i < len) {
// your code
i++
}
我想说,这绝对是我为JavaScript引擎开发者喝彩的地方。运行时应该优化为清晰,而不是聪明。
我在这里有个测试。检查这个! https://gist.github.com/DungGramer/7efdfefecaa1b8f5d6510202524dc751
我的结果:
pop是最快的,forEach的可读性和速度最好 while比for快 如果没有条件,循环更快(如if) i是最快的
最快的方法是传统的for循环。这里有一个更全面的性能比较。
https://gists.cwidanage.com/2019/11/how-to-iterate-over-javascript-arrays.html
var arr = []; // The array
var i = 0;
while (i < arr.length) {
// Do something with arr[i]
i++;
}
i++比++ I,——I和I——快
此外,您可以保存最后一次需要访问i时执行arr[i++]的最后一行(但这可能很难调试)。
您可以在这里(使用其他循环测试)测试它:http://jsperf.com/for-vs-whilepop/5