有什么理由在javascript中从一端到另一端遍历数组?

时间:2014-01-14 23:31:59

标签: javascript arrays

以下似乎是 Javascript

中非常常见的做法
for (var i = array.Length - 1; i >= 0; i--) { /* do stuff here */ };

我从未在其他语言中注意到这一点......它是否有任何好处:

for (var i = 0; i < array.Length; i++) { /* do stuff here */ };

唯一想到的是在第一个中缓存数组长度,这不会是我猜的那么大的性能。你也可以:

var top =  array.Length;
for (var i = 0; i < top; i++) { /* do stuff here */ };    

为您提供相同的benefit缓存,但如果您最小化代码可能会少performant(在缩小脚本时可能会削减8个字符)

2 个答案:

答案 0 :(得分:3)

有时,它会产生巨大的差异。

var nodes = element.children, l = nodes.length, i;
for( i=0; i<l; i++) element.removeChild(nodes[i]);
// ^ FAILS WITH ERROR (unless l is 0 or 1)

for( i=l-1; i>=0; i--) element.removeChild(nodes[i]);
// ^ works

答案 1 :(得分:1)

正如其他答案中所提到的,当您从数组中删除元素时,向后移动会使事情变得更容易,但它也会提供轻微的性能提升,如this example (jsperf)中所示。我怀疑从最后开始并按照你的方式开始工作更快,因为你不必在循环的每次迭代后都获取数组的length属性。