JavaScriptのループ文あれこれ
1. 典型的なfor文
for (var i = 0; i < array.length; i++) { statement }
- ループ開始前に「var i = 0」でループに使う変数を宣言する。ちなみに、「,」でつなげると、複数の変数を宣言できる。
- 「i < array.length」がtrueであるかぎり、ループが続く。
- 「i++」が各ループの最後に実行される。「i++」はiが0のとき、iに1を足して0を返す。
- 各ループのはじめにarray.lengthを呼び出しているので、効率が悪い。事前にキャッシュすると2.のようになる。
2. 改良型for文
var i = 0, len = array.length; for (; i < len; i++) { statement }
- 事前にiとarray.lengthをキャッシュしておく。
- 「;」は省略できない。なんか気持ち悪い。whileを使ってシンプルにすると、3.のようになる。
3. while文
var len = array.length; while (len--) { statement }
- 「len--」がfalseになるとループが停止する。
- 「len--」は、lenが1のとき、lenに0をセットし、1を返す(よって、ループは続く)。lenが0のとき、lenに-1をセットし、0を返す(よって、falseと解釈されループは停止する)。
4. while文・do while文のテスト
var i = 10 while (i--) { console.log(i); } //=> 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 while (--i) { console.log(i); } //=> 9, 8, 7, 6, 5, 4, 3, 2, 1 do { console.log(i); } while (i--) //=> 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 do { console.log(i); } while (--i) //=> 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
- 「i--」はiを返してから1引く。「--i」は1引いてからiを返す。
- while文はループ開始時に評価し、do while文はループ終了時に評価する。
- 回数を指定してループを実行したいときは、「while (i--) {}」か「do {} while (i--)」がいい。