所以,我在很多地方看到过这段代码:
for (var i = 0, len = myArray.length; i < len; i++) {
}
我知道这是数组的长度缓存。
今天我看到了这个:
var len = myArray.length; var i = 0; while(i++ < len)
效率明智,两者都是一样的,对吗?任何意见都将不胜感激。
答案 0 :(得分:0)
在此处设置jsperf测试用例:
http://jsperf.com/javascript-array-length
for (i = 0; i < arr.length; i++) {
//nothing
}
var arrlength = arr.length;
for (i = 0; i < arrlength; i++) {
//nothing
}
var arrlength = arr.length,
i = 0;
while (arrlength > i++) {
//nothing
}
var arrlength = arr.length;
while (arrlength--) {
//nothing
}
如果可以改进测试用例,请在评论中告诉我。通过少量测试,似乎IE11针对while
案例进行了更好的优化,而Chrome 31似乎更喜欢第二个for
循环(这与while
案例非常相似)
答案 1 :(得分:0)
如果您有“正常”循环,也可以将i < len
更改为i !== len
。这使循环更快,因为检查不等式非常快。变量的缓存并不是那么重要,但它没有任何危害。
因此javascript中的快速循环可以写成如下:
for (var i = 0, len = myArray.length; i !== len; i++) {
}
<强>更新强>
前一段时间我做了一些性能测试,这就是我发现的。但是现在浏览器没有显示相同的行为,而且相反(<
比!==
更快)。这是我刚才做的一个测试:http://jsperf.com/loop-inequality-check
所以忘记上面的帖子;)