javascript数组遍历 - 效率

时间:2014-03-29 17:16:20

标签: javascript arrays performance

所以,我在很多地方看到过这段代码:

for (var i = 0, len = myArray.length; i < len; i++) {

}

我知道这是数组的长度缓存。

今天我看到了这个:

  

var len = myArray.length; var i = 0; while(i++ < len)

效率明智,两者都是一样的,对吗?任何意见都将不胜感激。

2 个答案:

答案 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

所以忘记上面的帖子;)