我偶然发现了几种在JavaScript中循环的方法,我最喜欢的是:
for(var i = 0; i < a.length; i++){ var element = a[i]; }
但是在这里进行了测试(http://www.robertnyman.com/2008/04/11/javascript-loop-performance/),应该编写它以便只计算一次长度.
在jQuery中有一个.each,你可以坚持一个功能.我喜欢这个更好一点,因为我不需要输入两次数组,就像上面的解决方案一样.
如果JavaScript支持宏,那么推出自己的宏将是件小事,但遗憾的是它没有.
那么你们用什么?
我已经开始使用相关的迭代器.性能是合理的,但更重要的是它允许您封装循环逻辑:
function createIterator(x) { var i = 0; return function(){ return x[i++]; }; }
然后使用:
var iterator=createIterator(['a','b','c','d','e','f','g']); iterator();
返回"a";
iterator();
返回"b";
等等.
迭代整个列表并显示每个项目:
var current; while(current=iterator()) { console.log(current); }
请注意,上述内容仅适用于迭代包含"非虚假"值的列表.如果此数组包含以下任何一个:
0
假
""
空值
为NaN
上一个循环将停止在该项目,而不是总是你想要/期望的.
为避免这种用途:
var current; while((current=iterator())!==undefined) { console.log(current); }
对原始的小改进,只计算一次数组大小:
for(var i = 0, len = a.length; i < len; i++){ var element = a[i]; }
另外,我看到很多for..in循环.虽然请记住它在技术上不是犹太洁食,并且会特别引起Prototype的问题:
for (i in a) { var element = a[i]; }
首先将长度存储在变量中.
var len = a.length; for (var i = 0; i < len; i++) { var element = a[i]; }
我知道我迟到了,但我使用反向循环来进行不依赖于顺序的循环.
与@Mr非常相似.麝香鼠 - 但简化了测试:
var i = a.length, element = null; while (i--) { element = a[i]; }