SyntaxError: Ein nicht gekennzeichneter break muss innerhalb einer Schleife oder eines switch sein

Der JavaScript-Ausnahmefehler "unlabeled break must be inside loop or switch" tritt auf, wenn eine break-Anweisung nicht innerhalb einer Schleife oder einer switch-Anweisung verwendet wird.

Meldung

SyntaxError: Illegal break statement (V8-based)
SyntaxError: unlabeled break must be inside loop or switch (Firefox)
SyntaxError: 'break' is only valid inside a switch or loop statement. (Safari)

Fehlerart

Was ist schiefgegangen?

break-Anweisungen können verwendet werden, um eine Schleife oder eine switch-Anweisung zu verlassen, und die Verwendung an anderer Stelle ist ein Syntaxfehler. Alternativ können Sie der break-Anweisung ein Label zuweisen, um aus einer beliebigen Anweisung mit diesem Label auszubrechen — wenn das Label jedoch keine umgebende Anweisung referenziert, wird ein anderer Fehler SyntaxError: label not found ausgelöst.

Beispiele

Unsachgemäßes break

break kann außerhalb von switch oder Schleifen nicht verwendet werden.

js
let score = 0;

function increment() {
  if (score === 100)
    break; // SyntaxError: unlabeled break must be inside loop or switch
  }
  score++;
}

Vielleicht möchten Sie stattdessen return verwenden, um eine Funktion frühzeitig zu beenden.

js
let score = 0;

function increment() {
  if (score === 100) {
    return;
  }
  score++;
}

Verwendung von break in Callbacks

break kann in Callbacks nicht verwendet werden, selbst wenn der Callback aus einer Schleife aufgerufen wird.

js
let containingIndex = 0;
const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

while (containingIndex < matrix.length) {
  matrix[containingIndex].forEach((value) => {
    if (value === 5) {
      break; // SyntaxError: unlabeled break must be inside loop or switch
    }
  });
  containingIndex++;
}

Stattdessen sollten Sie den Code so umstrukturieren, dass das break außerhalb des Callbacks verwendet wird.

js
let containingIndex = 0;
const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

outer: while (containingIndex < matrix.length) {
  for (const value of matrix[containingIndex]) {
    if (value === 5) {
      break outer;
    }
  }
  containingIndex++;
}
js
let containingIndex = 0;
const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

while (containingIndex < matrix.length) {
  if (matrix[containingIndex].includes(5)) {
    break;
  }
  containingIndex++;
}

Es gibt keine Möglichkeit, eine forEach()-Schleife vorzeitig zu beenden. Sie können stattdessen some() verwenden oder sie in eine for...of Schleife umwandeln.

js
array.forEach((value) => {
  if (value === 5) {
    break; // SyntaxError: unlabeled break must be inside loop or switch
  }
  // do something with value
});
js
array.some((value) => {
  if (value === 5) {
    return true;
  }
  // do something with value
  return false;
});
js
for (const value of array) {
  if (value === 5) {
    break;
  }
  // do something with value
}

Siehe auch