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--)」がいい。