whileループを使うと、ある条件が満たされている間、コードを繰り返し実行できます。
whileループは、whileキーワードのあとに、丸括弧(())で囲んだ条件と、ループの_本体_を含み波括弧({})で囲んだブロックを続けて書きます。
while (condition) {
// code that is executed repeatedly as long as the condition is
// true
}
JavaScriptにはdo-whileループもあります。
こちらは、ループの本体を実行したあとに条件をチェックします。
条件が本体の中での処理の結果に依存する場合に便利です。
do {
// The code here will always be executed once and then
// repeatedly while the condition is true.
} while (condition);
breakループの本体の中では、breakキーワードを使ってループの実行を完全に止められます。
これは、条件にtrueを指定する場合と組み合わせてよく使われます。
そうすれば、ループをいつ止めるかを、ループ本体のどこからでも制御できます。
const winningNumber = 7;
while (true) {
const num = readUserGuess();
if (num === winningNumber) {
break;
}
}
breakキーワードは、ループの中に入れ子になった関数の中では使えません。例については、MDNのドキュメントを参照してください。
continuebreakとは対照的に、continueキーワードは現在の繰り返しの実行だけを止め、次の繰り返しに進みます。
continueを使うと、ループ本体の大部分をif文で囲まずに済むこともよくあります。
let i = 0;
while (i < 100) {
i = i + 2;
if (i % 3 === 0) {
continue;
}
// The code here will only be executed when i was not divisible
// by 3 in the check above.
}
ループの条件が常に満たされ、ループ本体の中でbreak文やreturn文に到達しない場合、(理論上)永遠に繰り返されるループができてしまいます。
このような実行は、外側から終了させるしかありません。
無限ループになるコードが動く環境によって、自動的に終了されることもあれば、手動で止めなければならないこともあります。
let i = 0;
while (i < 100) {
if (i % 3 === 0) {
continue;
}
i = i + 2;
}
// This loop runs forever since the variable i does not change
// anymore after it is divisible by 3 the first time.
この程度のおもちゃのような例では、無限ループを見つけるのは簡単に思えるかもしれません。しかし、もっと複雑なコードでは、いつもそう簡単とは限りません。
条件が最終的にfalseになるのか、break文やreturn文に到達するのかを、しっかり考えるのがよい習慣です。