【JavaScript】breakでループ処理を中断させる方法

break 文は、ループを途中で中断して抜けるための構文です。特定の条件を満たしたら、それ以降の繰り返しを実行せずにループを終了できます。

この記事では、基本の使い方から、continue との違い、forEachbreak できない問題とその代替、ネストしたループを一気に抜けるラベル付き breakまで解説します。

この記事の結論:breakfor / while / for...of を抜けられます。forEach では break できないので、途中で止めたいなら for...ofsome() / find() を使います。ネストしたループを一気に抜けるにはラベル付き break。現在の反復だけ飛ばすのは continue です。
スポンサーリンク

基本:breakでループを抜ける(for / while)

条件を満たしたら break を実行すると、その時点でループが終了します。for でも while でも同じです。

JavaScript:forでbreak
for (let i = 0; i < 10; i++) {
  if (i === 5) {
    break; // iが5になったらループを中断
  }
  console.log(i); // 0, 1, 2, 3, 4 が出力される
}
JavaScript:whileでbreak
let i = 0;
while (i < 10) {
  if (i === 5) break;
  console.log(i);
  i++;
}

値が見つかったら抜ける(for…of)

配列から特定の値を探し、見つかった時点で検索を終了したいときに break が役立ちます。

JavaScript:見つかったらbreak
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

for (const number of numbers) {
  if (number === 7) {
    console.log("見つかりました:", number);
    break; // 7が見つかったので終了
  }
}

「条件に合う要素を探す」だけなら、find()some() を使うと自動的に見つかった時点で止まり、より宣言的に書けます(配列から条件に合う要素を取り出す方法)。

continueとの違い(スキップ vs 中断)

break と混同しやすいのが continue です。continue は現在の反復だけスキップして次へ進みbreak はループ自体を終了します。

JavaScript:continueは現在の反復だけ飛ばす
for (let i = 0; i < 5; i++) {
  if (i === 2) continue; // 2のときだけスキップ
  console.log(i); // 0, 1, 3, 4(2だけ飛ぶ。ループは続く)
}

forEachではbreakできない(代替)

forEach では break が使えません(構文エラーになります)。forEach 内の return も「現在の要素をスキップ」するだけで、ループは止まりません。途中で止めたいなら次のいずれかを使います。

JavaScript:forEachの代替で途中終了
// ① for...of なら break が使える
for (const n of [1, 2, 3, 4]) {
  if (n === 3) break;
  console.log(n);
}

// ② some():trueを返した時点で停止
[1, 2, 3, 4].some((n) => {
  console.log(n);
  return n === 2; // ここで停止
});

// ③ find():条件に合う最初の要素で停止
const found = [5, 6, 7, 8].find((n) => n > 6); // 7
forEachは止められない:forEach は全要素を必ず最後まで処理します。途中で抜けたいなら for...of、「条件を満たすものがあるか」なら some()、「最初の1つを探す」なら find() を使い分けましょう。配列メソッド全般はmap・filter・reduceの使い方を参照してください。

ネストしたループを一気に抜ける(ラベル付きbreak)

ループが入れ子になっている場合、ふつうの breakもっとも内側のループしか抜けません。外側まで一気に抜けたいときは、ループにラベルを付けてbreak ラベル名 とします。

JavaScript:ラベル付きbreakで外側も抜ける
outer: for (let i = 0; i < 3; i++) {
  for (let j = 0; j < 3; j++) {
    if (i + j === 3) {
      break outer; // 外側のループごと抜ける
    }
    console.log(i, j);
  }
}

outer: がラベルです。break outer で、内側だけでなく outer ラベルの付いた外側のループも終了します。

よくある質問(FAQ)

QJavaScriptのbreak文はどのループで使えますか?
Aforwhiledo-whileswitch で使えます。ネストしたループでは最も内側のループのみ抜けます。ラベル付き breakbreak ラベル名)を使うと外側のループも抜けられます。
QforEach内でbreakを使うには?
AforEachbreak に対応していません。早期終了が必要ならfor...offor 文を使ってください。または some()(trueで停止)や find()(見つかった時点で停止)で代替できます。
Qcontinueとbreakの違いは?
Acontinue現在の反復をスキップして次の反復に進みます。breakループ自体を終了して抜けます。switch での breakcase の処理を終了し switch 文を抜けます。
Qラベル付きbreakは使ってもいい?
Aネストしたループを一気に抜けたいときには有効です。ただし多用すると読みにくくなるため、処理を関数に切り出して return で抜ける、といった方法も検討するとよいでしょう。

まとめ

breakfor / while / for...of を途中で終了させる構文です。値が見つかったら抜ける、といった処理に便利です。

注意点は、forEach では break できないこと(for...ofsome / find で代替)、ネストを一気に抜けるにはラベル付き breakを使うこと、そして現在の反復だけ飛ばす continue との違いです。用途で使い分けましょう。