SyntaxError: unlabeled break muss innerhalb einer Schleife oder eines Switch sein

Die JavaScript-Ausnahme "unlabeled break muss innerhalb einer Schleife oder eines Switch sein" tritt auf, wenn eine break-Anweisung nicht innerhalb einer Schleife oder einer switch-Anweisung steht.

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) 

Fehlertyp

Was ist schiefgelaufen?

break-Anweisungen können verwendet werden, um eine Schleife oder eine switch-Anweisung zu verlassen. Ihre Verwendung an anderer Stelle führt zu einem 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 umschließende Anweisung referenziert, wird ein weiterer Fehler SyntaxError: label not found ausgelöst.

Beispiele

Unsynaktisches break

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

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

Vielleicht beabsichtigen Sie stattdessen, return zu verwenden, um eine Funktion vorzeitig zu beenden.

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

Verwendung von break in Callbacks

break kann nicht in Callbacks verwendet werden, selbst wenn das Callback von 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 umstrukturieren, sodass 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