break

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

break 語句終止當前迴圈或 switch 語句,並將程式控制轉移到終止語句之後的語句。它也可以用於在標籤語句內部使用時跳過標籤語句

試一試

let i = 0;

while (i < 6) {
  if (i === 3) {
    break;
  }
  i += 1;
}

console.log(i);
// Expected output: 3

語法

js
break;
break label;
label 可選

與要跳出的語句的標籤相關聯的識別符號。如果 break 語句沒有巢狀在迴圈或 switch 語句中,則需要標籤識別符號。

描述

當遇到 break; 時,程式會跳出最內部的 switch迴圈語句,並繼續執行該語句之後的下一條語句。

當遇到 break label; 時,程式會跳出帶有 label 標籤的語句,並繼續執行該語句之後的下一條語句。break 語句需要巢狀在引用的標籤內。標籤語句可以是任何語句(通常是語句);它不必是另一個迴圈語句。

break 語句,無論後面是否帶有標籤,都不能在指令碼、模組、函式體或靜態初始化塊的頂層使用,即使函式或類進一步包含在迴圈中。

示例

while 迴圈中的 break

以下函式有一個 break 語句,當 i 為 3 時終止 while 迴圈,然後返回 3 * x 的值。

js
function testBreak(x) {
  let i = 0;

  while (i < 6) {
    if (i === 3) {
      break;
    }
    i += 1;
  }

  return i * x;
}

switch 語句中的 break

以下程式碼有一個 break 語句,當匹配到某個 case 並且相應的程式碼已執行時,該語句終止 switch 語句。

js
const food = "sushi";

switch (food) {
  case "sushi":
    console.log("Sushi is originally from Japan.");
    break;
  case "pizza":
    console.log("Pizza is originally from Italy.");
    break;
  default:
    console.log("I have never heard of that dish.");
    break;
}

標籤塊中的 break

以下程式碼使用帶有標籤塊的 break 語句。透過使用 break outerBlock,控制權轉移到標記為 outerBlock 的塊語句的末尾。

js
outerBlock: {
  innerBlock: {
    console.log("1");
    break outerBlock; // breaks out of both innerBlock and outerBlock
    console.log(":-("); // skipped
  }
  console.log("2"); // skipped
}

不合語法的 break 語句

break 語句必須巢狀在其引用的任何標籤內。以下程式碼也使用帶有標籤塊的 break 語句,但會生成語法錯誤,因為它的 break 語句引用了 block2,但它沒有巢狀在 block2 中。

js
block1: {
  console.log("1");
  break block2; // SyntaxError: label not found
}

block2: {
  console.log("2");
}

在以下程式碼示例中也會生成語法錯誤,這些示例在巢狀在迴圈或標籤塊中的函式中使用 break 語句,而這些 break 語句旨在跳出這些迴圈或標籤塊。

js
function testBreak(x) {
  let i = 0;

  while (i < 6) {
    if (i === 3) {
      (() => {
        break;
      })();
    }
    i += 1;
  }

  return i * x;
}

testBreak(1); // SyntaxError: Illegal break statement
js
block1: {
  console.log("1");
  (() => {
    break block1; // SyntaxError: Undefined label 'block1'
  })();
}

規範

規範
ECMAScript® 2026 語言規範
# sec-break-statement

瀏覽器相容性

另見