在javascript中迭代项目的最佳方法是什么?

Sor*_*oot 12 javascript for-loop undefined

我最近通过一种不同的方式循环使用Javascript中的数组.

我曾经写过这样的循环:

for (var len = 0; len < testData.length; len++) {
  total = total + testData[len];
}
Run Code Online (Sandbox Code Playgroud)

我读了一些这样做的代码:

for (var len = 0; testData[len]; len++) {
  total = total + testData[len];
}
Run Code Online (Sandbox Code Playgroud)

我想知道这些会如何表现所以我用jsPerf来找出它.结果非常惊人.我期望第二种方法比第一种方法快一点,但它实际上要快得多.

我在这里失踪了吗?或者这是循环列表项的最佳方式.

更新:

灰色的状态即将来临,Diode指出我在测试用例中的一个简单的缺陷似乎更快.

纠正错误后,这是最快的:

var datalen = testData.length;
for (var len = 0; len <datalen; len++) {
     total = total + testData[len];
}
Run Code Online (Sandbox Code Playgroud)

更新2:

在更多浏览器中测试后,此测试用例再次采用不同的方向.只有在Chrome和Opera中,正常的循环才是最快的.在其他所有浏览器中,Shmiddty的方式只是快一点.

var i = testData.length, sum=0;
while (i--){
    sum += testData[i];
}
Run Code Online (Sandbox Code Playgroud)

Hal*_*yon 13

我认为第一种形式更好.第二种形式有一些问题.如果你有一个包含falsy值的稀疏数组怎么办?喜欢:var testData = [ "text", undefined, false, 0, 5 ];

我还希望第一种形式表现更好.特别是如果你'缓存' testData.length喜欢这样的价值:

var i, len = testData.length;
for (i = 0; i < len; i += 1) {
  total = total + testData[i];
}
Run Code Online (Sandbox Code Playgroud)


Shm*_*dty 3

您还可以像这样进行循环:

var i = testData.length;

while (i--){
    console.log(testData[i]);
}
Run Code Online (Sandbox Code Playgroud)

请注意,它向后遍历数组。

或者,总结一下:

var i = testData.length, sum=0;

while (i--){
    sum += testData[i];
}
Run Code Online (Sandbox Code Playgroud)