我从书中学到,你应该这样写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
}
我只是想知道在实践中哪种方法是最好的?
当前回答
最快的方法是传统的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
最快的方法是传统的for循环。这里有一个更全面的性能比较。
https://gists.cwidanage.com/2019/11/how-to-iterate-over-javascript-arrays.html
“最好”是指纯粹的表演吗?还是性能和可读性?
纯性能“最佳”是这个,它使用缓存和++前缀操作符(我的数据:http://jsperf.com/caching-array-length/189)
for (var i = 0, len = myArray.length; i < len; ++i) {
// blah blah
}
我认为无缓存的for循环是执行时间和程序员读取时间的最佳平衡。每一个从C/ c++ /Java开始的程序员都不会浪费时间去阅读这本书
for(var i=0; i < arr.length; i++){
// blah blah
}
截至2017年9月,这些jsperf测试显示以下模式在Chrome 60上性能最佳:
function foo(x) {
x;
};
arr.forEach(foo);
有人能繁殖吗?
这似乎是目前为止最快的方法……
var el;
while (el = arr.shift()) {
el *= 2;
}
考虑到这将消耗数组,吃掉它,不留下任何东西……