Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Anweisungen und Deklarationen
  5. Bezeichnete Anweisung

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

Bezeichnete Anweisung

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Juli 2015⁩.

Einebezeichnete Anweisung ist jedeAnweisung, die mit einem Bezeichner versehen ist. Sie können mit einer innerhalb der bezeichneten Anweisung verschachteltenbreak- odercontinue-Anweisung zu diesem Bezeichner springen.

Probieren Sie es aus

let i, j;loop1: for (i = 0; i < 3; i++) {  loop2: for (j = 0; j < 3; j++) {    if (i === 1 && j === 1) {      break loop1;    }    console.log(`i = ${i}, j = ${j}`);  }}// Expected output:// "i = 0, j = 0"// "i = 0, j = 1"// "i = 0, j = 2"// "i = 1, j = 0"

Syntax

js
label:  statement
label

Ein beliebiger JavaScript-Bezeichner, der keinreserviertes Wort ist.

statement

Eine JavaScript-Anweisung.break kann innerhalb jeder bezeichneten Anweisung verwendet werden, undcontinue kann innerhalb von bezeichneten Schleifenanweisungen verwendet werden.

Beschreibung

Sie können ein Label verwenden, um eine Anweisung zu identifizieren, und später mit einerbreak- odercontinue-Anweisung darauf verweisen. Beachten Sie, dass JavaScriptkeinegoto-Anweisung hat; Sie können Labels nur mitbreak odercontinue verwenden.

Jedebreak- odercontinue-Anweisung, die auflabel verweist, muss innerhalb der Anweisung enthalten sein, die durchlabel bezeichnet wird. Betrachten Sielabel als eine Variable, die nur im Bereich vonstatement verfügbar ist.

Wenn einebreak label;-Anweisung beim Ausführen vonstatement auftritt, endet die Ausführung vonstatement, und die Ausführung wird mit der Anweisung unmittelbar nach der bezeichneten Anweisung fortgesetzt.

continue label; kann nur verwendet werden, wennstatement eine derSchleifenanweisungen ist. Wenn einecontinue label;-Anweisung während der Ausführung vonstatement auftritt, wird die Ausführung vonstatement in der nächsten Iteration der Schleife fortgesetzt.continue; ohne Bezeichner kann nur die innerste Schleife fortsetzen, währendcontinue label; es ermöglicht, jede gegebene Schleife fortzusetzen, selbst wenn die Anweisung innerhalb anderer Schleifen verschachtelt ist.

Eine Anweisung kann mehrere Bezeichner haben. In diesem Fall sind die Bezeichner alle funktional gleichwertig.

Beispiele

Verwenden von bezeichnetem Continue mit For-Schleifen

js
// The first for statement is labeled "loop1"loop1: for (let i = 0; i < 3; i++) {  // The second for statement is labeled "loop2"  loop2: for (let j = 0; j < 3; j++) {    if (i === 1 && j === 1) {      continue loop1;    }    console.log(`i = ${i}, j = ${j}`);  }}// Logs:// i = 0, j = 0// i = 0, j = 1// i = 0, j = 2// i = 1, j = 0// i = 2, j = 0// i = 2, j = 1// i = 2, j = 2

Beachten Sie, wie es sowohl "i = 1, j = 1" als auch "i = 1, j = 2" überspringt.

Verwenden von bezeichnetem Break mit For-Schleifen

js
let i, j;// The first for statement is labeled "loop1"loop1: for (i = 0; i < 3; i++) {  // The second for statement is labeled "loop2"  loop2: for (j = 0; j < 3; j++) {    if (i === 1 && j === 1) {      break loop1;    }    console.log(`i = ${i}, j = ${j}`);  }}// Logs:// i = 0, j = 0// i = 0, j = 1// i = 0, j = 2// i = 1, j = 0

Beachten Sie den Unterschied zum vorherigencontinue-Beispiel: wennbreak loop1 ausgeführt wird, wird die Ausführung der äußeren Schleife beendet, sodass keine weiteren Ausgaben nach "i = 1, j = 0" erfolgen; wenncontinue loop1 auftritt, wird die Ausführung der äußeren Schleife in der nächsten Iteration fortgesetzt, sodass nur "i = 1, j = 1" und "i = 1, j = 2" übersprungen werden.

Verwenden einer bezeichneten Continue-Anweisung

Angesichts eines Arrays von Elementen und eines Arrays von Tests zählt dieses Beispiel die Anzahl der Elemente, die alle Tests bestehen.

js
// Numbers from 1 to 100const items = Array.from({ length: 100 }, (_, i) => i + 1);const tests = [  { pass: (item) => item % 2 === 0 },  { pass: (item) => item % 3 === 0 },  { pass: (item) => item % 5 === 0 },];let itemsPassed = 0;itemIteration: for (const item of items) {  for (const test of tests) {    if (!test.pass(item)) {      continue itemIteration;    }  }  itemsPassed++;}

Beachten Sie, wie die Anweisungcontinue itemIteration; den Rest der Tests für das aktuelle Element sowie die Anweisung, die denitemsPassed-Zähler aktualisiert, überspringt und mit dem nächsten Element fortfährt. Ohne den Einsatz eines Bezeichners müsste man stattdessen einen booleschen Indikator verwenden.

js
// Numbers from 1 to 100const items = Array.from({ length: 100 }, (_, i) => i + 1);const tests = [  { pass: (item) => item % 2 === 0 },  { pass: (item) => item % 3 === 0 },  { pass: (item) => item % 5 === 0 },];let itemsPassed = 0;for (const item of items) {  let passed = true;  for (const test of tests) {    if (!test.pass(item)) {      passed = false;      break;    }  }  if (passed) {    itemsPassed++;  }}

Verwenden einer bezeichneten Break-Anweisung

Angesichts eines Arrays von Elementen und eines Arrays von Tests bestimmt dieses Beispiel, ob alle Elemente alle Tests bestehen.

js
// Numbers from 1 to 100const items = Array.from({ length: 100 }, (_, i) => i + 1);const tests = [  { pass: (item) => item % 2 === 0 },  { pass: (item) => item % 3 === 0 },  { pass: (item) => item % 5 === 0 },];let allPass = true;itemIteration: for (const item of items) {  for (const test of tests) {    if (!test.pass(item)) {      allPass = false;      break itemIteration;    }  }}

Auch hier müsste man ohne den Einsatz eines Bezeichners stattdessen einen booleschen Indikator verwenden.

js
// Numbers from 1 to 100const items = Array.from({ length: 100 }, (_, i) => i + 1);const tests = [  { pass: (item) => item % 2 === 0 },  { pass: (item) => item % 3 === 0 },  { pass: (item) => item % 5 === 0 },];let allPass = true;for (const item of items) {  let passed = true;  for (const test of tests) {    if (!test.pass(item)) {      passed = false;      break;    }  }  if (!passed) {    allPass = false;    break;  }}

Verwenden eines bezeichneten Blocks mit Break

Sie können andere Anweisungen als Schleifen, wie einfache Blöcke, bezeichnen, aber nurbreak-Anweisungen können nicht-schleifenlabels referenzieren.

js
foo: {  console.log("face");  break foo;  console.log("this will not be executed");}console.log("swap");// Logs:// "face"// "swap"

Bezeichnete Funktionsdeklarationen

Bezeichner können nur aufAnweisungen, nicht auf Deklarationen angewendet werden. Es gibt eine veraltete Grammatik, die es erlaubt, Funktionsdeklarationen in nicht-striktem Code zu bezeichnen:

js
L: function F() {}

Imstrict mode Code wird dies jedoch einenSyntaxError auslösen:

js
"use strict";L: function F() {}// SyntaxError: functions cannot be labelled

Nicht-einfache Funktionen, wieGeneratorfunktionen undasynchrone Funktionen können weder im strikten Code noch im nicht-strikten Code gekennzeichnet werden:

js
L: function* F() {}// SyntaxError: generator functions cannot be labelled

Der Syntax der bezeichneten Funktionsdeklaration istveraltet und sollte nicht verwendet werden, selbst in nicht-striktem Code. Sie können tatsächlich innerhalb des Funktionskörpers nicht zu diesem Bezeichner springen.

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-labelled-statements

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp