Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Инструкции и объявления
  5. Метка

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

Метка

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨июль 2015 г.⁩.

Метки используются вместе с операторамиbreak иcontinue. Они выступают в роли идентификатора инструкции, на который можно сослаться.

Интерактивный пример

let str = "";loop1: for (let i = 0; i < 5; i++) {  if (i === 1) {    continue loop1;  }  str = str + i;}console.log(str);// Expected output: "0234"

Синтаксис

js
label:  statement;
label

Идентификатор. Любое слово, кроме ключевых и зарезервированных в JavaScript.

statement

Инструкция.break может быть использован внутри любого блока инструкций с меткой, а сcontinue только внутри циклов.

Описание

Вы можете использовать метки для обозначения циклов, чтобы затем при помощиbreak илиcontinue выходить из цикла или продолжать его работу с новой итерации соответственно.

Обратите внимание, в JavaScriptотсутствует операторgoto, вы можете использовать метки только сbreak илиcontinue.

Встрогом режиме использование слова "let" в качестве имени метки запрещено — вы получите ошибкуSyntaxError (потому чтоlet является ключевым словом в новых стандартах JavaScript).

Примеры

Использование метки с оператором continue в цикле

js
let i, j;loop1: for (i = 0; i < 3; i++) {  //Первый цикл, обозначенный меткой "loop1"  loop2: for (j = 0; j < 3; j++) {    //Второй цикл, обозначенный меткой "loop2"    if (i === 1 && j === 1) {      continue loop1;    }    console.log("i = " + i + ", j = " + j);  }}// Вывод://   "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"// Обратите внимание на пропуск "i = 1, j = 1" и "i = 1, j = 2"

Другой пример использования метки с continue

В примере по массиву элементов и массиву тест-функций вычисляется количество элементов, которые проходят все тесты.

js
let itemsPassed = 0;let i, j;top: for (i = 0; i < items.length; i++) {  for (j = 0; j < tests.length; j++) {    if (!tests[j].pass(items[i])) {      continue top;    }  }  itemsPassed++;}

Использование метки с оператором break в цикле

js
let i, j;loop1: for (i = 0; i < 3; i++) {  //Первый цикл, обозначенный меткой "loop1"  loop2: for (j = 0; j < 3; j++) {    //Второй цикл, обозначенный меткой "loop2"    if (i === 1 && j === 1) {      break loop1;    }    console.log("i = " + i + ", j = " + j);  }}// Вывод://   "i = 0, j = 0"//   "i = 0, j = 1"//   "i = 0, j = 2"//   "i = 1, j = 0"// Обратите внимание на разницу результатов в аналогичном примере с continue

Другой пример использования метки с break

В примере по массиву элементов и массиву тест-функций определяется, все ли элементы проходят все тесты.

js
let allPass = true;let i, j;top: for (i = 0; i < items.length; i++) {  for (j = 0; j < tests.length; j++) {    if (!tests[j].pass(items[i])) {      allPass = false;      break top;    }  }}

Использование метки для блока инструкций с break

Метки можно использовать для обычных блоков кода, но только с операторомbreak.

js
foo: {  console.log("привет");  break foo;  console.log("эта строка не будет исполнена");}console.log("мир");// Вывод://   "привет"//   "мир"

Объявление функций с меткой

Начиная с ECMAScript 2015, объявление функции с меткой допускается только в обычном режимедля совместимости с этой нестандартной, но реализованной в некоторых браузерах, возможностью.

js
L: function F() {}

Однако встрогом режиме такой код вызовет ошибкуSyntaxError:

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

Объявлениефункций-генераторов с меткой не допускается ни в обычном, ни в строгом режимах:

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

Спецификации

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

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp