Signatur
Beschreibung
Ein Labeled Statement (beschriftete Anweisung) besteht aus einem frei wählbaren Bezeichner (Label), gefolgt von einem Doppelpunkt und einer beliebigen JavaScript-Anweisung. Das Label selbst hat keinen Einfluss auf den Programmablauf – es dient ausschließlich als Zielmarke für die Schlüsselwörter break und continue.
Am häufigsten werden Labels in verschachtelten Schleifen eingesetzt: Mit break labelName kann man eine äußere Schleife direkt verlassen, ohne dass man Hilfsvariablen oder mehrfache break-Anweisungen benötigt. Mit continue labelName springt man zum nächsten Durchlauf der beschrifteten (äußeren) Schleife, anstatt nur die innere zu überspringen.
Labels gelten im gesamten Gültigkeitsbereich des Blocks, in dem sie deklariert sind. Doppelte Label-Namen im gleichen Scope sind verboten und führen zu einem SyntaxError. Labels sind kein Sprungbefehl im Stil von GOTO – sie funktionieren ausschließlich zusammen mit break/continue.
Obwohl Labels ein legitimes Sprachmittel sind, sollte man sie sparsam einsetzen. Häufig lässt sich die Logik durch das Auslagern des Schleifenkörpers in eine eigene Funktion (und den Einsatz von return) klarer ausdrücken.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $label Pflicht | string | — | Ein gültiger JavaScript-Bezeichner (kein reserviertes Wort), der als Name der Markierung dient. |
| $statement Pflicht | statement | — | Eine beliebige JavaScript-Anweisung (z. B. for, while, switch, ein Block { } oder eine einfache Anweisung), die mit dem Label verknüpft wird. |
Rückgabewert
Beispiele
Äußere Schleife mit break verlassen
// Ohne Label müsste man eine Hilfsvariable setzen.
// Mit Label verlässt break die äußere for-Schleife direkt.
outerLoop: for (let i = 0; i < 4; i++) {
for (let j = 0; j < 4; j++) {
if (i === 2 && j === 1) {
console.log(`break bei i=${i}, j=${j}`);
break outerLoop; // verlässt BEIDE Schleifen
}
console.log(`i=${i}, j=${j}`);
}
}
console.log('Fertig');
Äußere Schleife mit continue überspringen
// continue mit Label springt zum nächsten Durchlauf der
// äußeren Schleife und überspringt den Rest der inneren.
const matrix = [
[1, 2, -1, 4],
[5, 6, 7, 8],
[9, -2, 11, 12],
];
const result = [];
rowLoop: for (let row = 0; row < matrix.length; row++) {
for (let col = 0; col < matrix[row].length; col++) {
if (matrix[row][col] < 0) {
// Zeile mit negativem Wert überspringen
console.log(`Zeile ${row} übersprungen (negativer Wert an Spalte ${col})`);
continue rowLoop;
}
result.push(matrix[row][col]);
}
}
console.log('Gesammelte Werte:', result);
Labeled Block mit break (ohne Schleife)
// Labels funktionieren auch auf einfachen Blöcken –
// break springt dann ans Ende des beschrifteten Blocks.
validation: {
const user = { name: 'Ada', age: 15 };
if (!user.name) {
console.log('Kein Name.');
break validation;
}
if (user.age < 18) {
console.log('Nicht volljährig – Validierung abgebrochen.');
break validation;
}
console.log('Benutzer ist gültig.'); // wird nicht erreicht
}
console.log('Nach dem Block.');
// Wichtig · Fallstricke
Fallstricke & Hinweise:
- Kein GOTO: Labels erlauben keinen freien Sprung an eine beliebige Stelle im Code. Sie wirken ausschließlich in Kombination mit
breakundcontinue. - Doppelte Labels: Zwei Labels mit demselben Namen im selben Scope erzeugen einen
SyntaxError. continuenur bei Schleifen:continue labelNameist nur erlaubt, wenn das Label auf eine Schleifenanweisung (for,while,do…while) zeigt – nicht auf einfache Blöcke.- Strict Mode: Labels dürfen auch im Strict Mode verwendet werden; jedoch darf der Label-Name kein reserviertes Wort sein (z. B.
let,staticsind in manchen Kontexten verboten). - Lesbarkeit: Tief verschachtelte Labels erschweren die Wartbarkeit. Als Alternative empfiehlt sich das Auslagern in eine Hilfsfunktion, die mit
returnfrühzeitig beendet wird. - Browser-Kompatibilität: Labeled Statements sind seit jeher (ES1) Teil der Sprache und werden in allen Umgebungen vollständig unterstützt.