変なfor文発見

inでないfor文というのは

var arr = ['a', 'b', 'c', 'd', 'e'];

for (var i = 0; i < arr.length; i ++) {
    alert(arr[i]);
}

な感じで
iが0で; lengthを使って配列の数以下まで続けて; iを1づつ足す
というようなもんだと思ってたんだけど


よく見るサイトで

var arr = ['a', 'b', 'c', 'd', 'e'];

for (var i = 0, s; s = arr[i]; i ++) {
    alert(s);
}

こんな記述をしていて、これでも問題なく実行できる。
var i , sのような記述ができるのは知っていたけど
lengthを使っていなくて、なんで無限ループにならんのかわからん。
とりあえず憶えておくけど、理屈がわからんのはすぐ忘れるんだよなぁ・・・。

追記

コメントでの有難い助言のおかげで理解できました。
ぶっちゃけ

var num = 3;

for (; num ++ < 10;) alert(num);

こんなんでもできましたし

for (var i = 0; i < 10; i ++, alert(i), alert('test' + i));

普段はi++などを書く;で区切られた3番目にも
カンマで区切れば複数のコードが実行できました。
for文一つにしても、これは奥が深いなぁ。


条件に&&などを使うこともできるとは知らんかった。

var s = 3;

//sが6まで繰り返された後、続けるかどうか聞いてくる。
for (; s ++ < 6 && confirm('continue?'); alert(s));

//毎回、続けるかどうか聞いてくる。
for (; s ++ < 6 || confirm('continue?'); alert(s));

やば、おもろい。


いつもならこんな感じに書いてたけど

var elm = document.getElementsByTagName('button');

for (var i = 0; i < elm.length; i ++) {
	alert(elm[i].id);
	alert(elm[i].innerText);
}

↓こう書き換えられる。

for (var i = 0, elm; elm = document.getElementsByTagName('button')[i ++];
	alert(elm.id),
	alert(elm.innerText)
);