0

因为我发现了这个片段,所以我经常使用它来迭代数组:

for (i = 0; elem = array[i]; i++) doStuff(elem);

如果array可以包含任何评估为假的东西('', undefined, null, 0, false),显然是非常错误的。但是,如果您确定不是这种情况,是否有人看到使用这种方法的另一个风险?

我问这个,因为它似乎不是很常用,虽然它对我来说真的很棒,所以我开始认为我错过了一个明显的缺点。

4

2 回答 2

6

你知道缺点,只要你能忍受它们......

另一种没有缺点的方法可能是

for (var i = 0, l = array.length, elem; i < l; elem = array[i++]) 

但它可能更模糊。

于 2012-08-11T20:05:17.163 回答
5

我认为至少有两个主要缺点:

  • 您已经提到的第一个:如果数组包含虚假值,则它不起作用。您不能总是确定没有任何元素是虚假的,无论是现在还是将来,随着新功能的添加。
  • 二是不规范混乱。它会让其他必须维护您的代码的开发人员摸不着头脑,试图弄清楚您为什么这样做而不是正常循环。或者他们可能会将其误读为elem == array[i].

保持简单,对你自己和你的同事都是如此。

for (var i = 0; i < array.length; i++) {
    var elem = array[i];
    doStuff(elem);
}
于 2012-08-11T20:06:19.410 回答