0

このスニペットを発見して以来、配列の反復処理に頻繁に使用しています。

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

arrayfalse ( ''undefinednull、 )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

少なくとも 2 つの大きな欠点があると思います。

  • 最初に述べたのは、配列に偽の値が含まれている場合は機能しません。新しい機能が追加されるため、現在および将来の両方で、どの要素も偽物ではないことを常に確信できるとは限りません。
  • 2 つ目は、非標準わかりにくいことです。コードを維持しなければならない他の開発者は、通常のループではなく、なぜそれを行ったのかを理解しようとして首をかしげることになります。または、彼らはそれを と誤解するかもしれませんelem == array[i]

自分にとっても同僚にとっても、シンプルに保ちましょう。

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