continue を一言でいうと
continue は、ループの中で
「この周(イテレーション)の残りはスキップして、すぐ次の周に進む」
ためのキーワードです。
ループ自体をやめるわけではありません。
「この回だけ飛ばす」「この条件のときだけ処理を抜かす」——
そんな“選別”をしたいときに使います。
break が「ループを完全に終了」なのに対して、continue は「今の一周だけ中断して、ループは続行」です。
一番シンプルな continue の動き
0〜9 をループしつつ「3 だけスキップ」する例
まずは for 文での基本例から。
for (let i = 0; i < 10; i++) {
if (i === 3) {
continue;
}
console.log(i);
}
JavaScriptこのコードの出力はこうなります。
0
1
2
4
5
6
7
8
9
3 だけ出てきません。
流れを言葉で追うとこうです。
i = 0→ if に入らない →console.log(0)i = 1→ if に入らない →console.log(1)i = 2→ if に入らない →console.log(2)i = 3→ if の中に入りcontinue実行 → 残り(console.log(i))はスキップ → すぐ次のi = 4へi = 4以降は普通に続く
ここで一番大事なのは、continue が実行された瞬間、「その周の残りの処理」が全部飛ばされる
ということです。
ループ自体は止まりません。
「この周はもういいや、次!」という感じで進みます。
break と continue の違いを体感する
break は「ループ終了」、continue は「この周だけスキップ」
同じ条件で break を使うとどうなるか比べてみましょう。
console.log("=== continue の場合 ===");
for (let i = 0; i < 10; i++) {
if (i === 3) {
continue;
}
console.log(i);
}
console.log("=== break の場合 ===");
for (let i = 0; i < 10; i++) {
if (i === 3) {
break;
}
console.log(i);
}
JavaScript出力はこうなります。
=== continue の場合 ===
0
1
2
4
5
6
7
8
9
=== break の場合 ===
0
1
2
continue のときは「3 だけ抜けて 9 まで続く」。break のときは「3 に到達した瞬間、ループ自体が終了」。
ここが重要です。
「ループを続けたいけど、この条件のときだけ処理を飛ばしたい」なら continue、
「この条件になったら、もうループ自体を終わらせたい」なら break
と覚えておくと、使い分けがスッと入ってきます。
while ループでの continue
while でも「この周だけスキップ」の意味は同じ
while でも continue の意味は同じです。
「この周の残りをスキップして、次の条件チェックへ飛ぶ」です。
let i = 0;
while (i < 10) {
i++;
if (i === 3) {
continue;
}
console.log(i);
}
JavaScript出力はやはり 1, 2, 4, 5, 6, 7, 8, 9 になります。
ここで注意してほしいのは、continue の前にカウンタ(i++)をちゃんと進めている ことです。
もしこう書いてしまうと、無限ループになります。
let i = 0;
while (i < 10) {
if (i === 3) {
continue; // i が増えないまま、ずっと 3 のまま…
}
console.log(i);
i++;
}
JavaScripti が 3 のときに continue で下の i++ がスキップされるので、i が永遠に 3 のままになってしまいます。
ここが重要です。
while で continue を使うときは、「カウンタを進める処理」がスキップされない位置にあるかを必ず確認する。for 文はカウンタ更新が構文の一部なので安全ですが、while は自分で気をつける必要があります。
実用的な例1:配列から「特定の条件の要素だけスキップ」する
奇数だけを表示したい(偶数は continue で飛ばす)
continue が一番生きるのは、
「この条件のときは処理しないで飛ばしたい」というフィルタ的な場面です。
例えば、配列から奇数だけを表示したいとします。
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (let i = 0; i < numbers.length; i++) {
const n = numbers[i];
if (n % 2 === 0) {
// 偶数なら、この周の残りをスキップ
continue;
}
console.log(n); // ここに来るのは奇数だけ
}
JavaScript出力は 1, 3, 5, 7, 9 です。
ここでの考え方はこうです。
「偶数のときは何もしない」
→ 「偶数のときは continue で残りを飛ばす」
→ 「残ったのは奇数だけなので、安心して処理できる」
if の中に「やらない処理」を書くのではなく、
「やらない条件のときに continue で早めに抜ける」 と、
ループの本体がスッキリします。
実用的な例2:不正なデータをスキップして処理を続ける
null や空文字など「扱いたくない値」を飛ばす
現実のコードでは、
配列の中に「null」「空文字」「想定外の値」が混ざっていることがよくあります。
そういうときに、
「変な値はスキップして、まともな値だけ処理したい」
という場面で continue が役立ちます。
const names = ["Alice", "", "Bob", null, "Charlie"];
for (let i = 0; i < names.length; i++) {
const name = names[i];
if (!name) {
// 空文字 "" や null, undefined などはスキップ
continue;
}
console.log("こんにちは、" + name + " さん");
}
JavaScript出力はこうなります。
こんにちは、Alice さん
こんにちは、Bob さん
こんにちは、Charlie さん
空文字と null は飛ばされているのが分かります。
ここが重要です。
「この条件のときは何もしない」というロジックを、
if の中にベタベタ書くのではなく、
「その条件なら continue で早めに抜ける」と考えると、
ループの本体が「やりたいことだけ」に集中できるようになります。
実用的な例3:ネストしたループでの continue(少しだけ応用)
二重ループで「内側の処理だけスキップ」する
二重ループでも continue は使えます。
まずはラベルなしのシンプルなパターン。
for (let i = 1; i <= 3; i++) {
for (let j = 1; j <= 3; j++) {
if (j === 2) {
continue; // 内側のループの「この周」だけスキップ
}
console.log(`i=${i}, j=${j}`);
}
}
JavaScript出力はこうなります。
i=1, j=1
i=1, j=3
i=2, j=1
i=2, j=3
i=3, j=1
i=3, j=3
j === 2 のときだけ、内側の処理が飛ばされています。
外側の i のループは普通に回り続けます。
ラベル付き continue(知識として)
JavaScript には「ラベル付き continue」もあります。
outer: for (let i = 1; i <= 3; i++) {
for (let j = 1; j <= 3; j++) {
if (j === 2) {
continue outer; // 外側のループの次の周へ
}
console.log(`i=${i}, j=${j}`);
}
}
JavaScriptこれは少しトリッキーなので、
初心者のうちは「ラベルなし continue」だけ使えれば十分です。
「こういうこともできるんだ」くらいの認識で OK。
初心者が continue を使うときに気をつけたいこと
使いすぎると「流れが追いにくくなる」
continue は便利ですが、
あちこちに散らばると「どこでスキップされるのか」が分かりにくくなります。
例えば、こういうコードは読みづらくなりがちです。
for (let i = 0; i < items.length; i++) {
if (!items[i]) continue;
if (items[i].disabled) continue;
if (items[i].hidden) continue;
// ここに来るまでに 3 回 continue の可能性がある
process(items[i]);
}
JavaScript悪くはないですが、
条件が増えてくると「何が OK 条件なのか」が見えにくくなります。
場合によっては、
「やりたい条件」をまとめて書いた方が読みやすいこともあります。
for (let i = 0; i < items.length; i++) {
const item = items[i];
const isUsable =
item &&
!item.disabled &&
!item.hidden;
if (!isUsable) {
continue;
}
process(item);
}
JavaScriptここが重要です。
continue 自体は悪者ではないけれど、
「条件が増えすぎて読みづらくなっていないか?」を常に意識する。
“早めに抜ける” ことでコードがスッキリするなら使う、
逆に分かりにくくなるなら if でまとめる——
このバランス感覚が大事です。
while での無限ループに特に注意
さっきも触れましたが、while で continue を使うときは、
「ループを進める処理(カウンタ更新など)がスキップされないか」を必ず確認してください。
for は構文の中に「更新式」があるので比較的安全ですが、while は自分で書く必要があります。
「continue の前にカウンタを進める」
「continue の後にしかカウンタがない、は危険」
この感覚を持っておくと、無限ループをかなり避けられます。
まとめ:continue をどう“味方”にするか
continue は、
「この周の残りをスキップして、次の周に進む」ためのキーワード。
break はループ自体を終わらせるのに対し、continue はループを続けながら「一部だけ飛ばす」。
よくある使いどころは、
「特定の条件の要素だけスキップしたい」
「不正なデータは飛ばして、まともなものだけ処理したい」
といった“フィルタ”的な場面。
while で使うときは、
カウンタ更新がスキップされて無限ループにならないように注意する。
そして何より、
「この条件のときは何もしない」を、
if の中にベタベタ書くのではなく、
“早めに continue で抜けて、残った本体をシンプルにする”
という発想で使うと、コードが一段読みやすくなります。
もし今書いているループで、
「この条件のときは処理したくないんだよな…」と感じたら、
一度 continue を思い出してみてください。
そのループ、本当はもっとスッキリ書けるかもしれません。
