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)
您还可以像这样进行循环:
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)
归档时间: |
|
查看次数: |
3598 次 |
最近记录: |