綺麗なバラにゃトゲがある
for (var i = 0, elem; elem = elems[i]; i++) { doSomething(elem) }って書き方見やすくていいな - こんにちはこんにちはmonmonです!で紹介されている記事に、ちょっとツッコミます。
元記事の紹介
ノードリストのイテレート - Google JavaScript Style Guide 和訳
var paragraphs = document.getElementsByTagName('p'); for (var i = 0, paragraph; paragraph = paragraphs[i]; i++) { doSomething(paragraph); }これはすべてのコレクション, 配列に対してうまく動きます. 要素がなくなるまでループし, 最後には false となりループが終了します.
落とし穴
代入文が値を返すことを利用した美しいコードで、getElementsByTagNameで取ってきたノードリストのイテレートには有用ですが、以下のような例では初っ端でコケちゃいます><
var list = [0, 1, 2, 3]; for (var i = 0, item; item = list[i]; i++) { doSomeThing(item); }
なので…
↑の原文は
Tips and Tricks - Google JavaScript Style Guide
This works well for all collections and arrays as long as the array does not contain things that are treated as boolean false.
↓のように
[追記]現在は修正されています。コメント欄にも書いたように、本来は訳者のid:cou929_laさんにフィードバックを送るべきでした。[/追記]
これは、配列が真偽値のfalseとして扱われるものを含まない限り、全てのコレクションや配列に対してうまく働きます。
…って、原文にはちゃんと書いてありますね。