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

View in English Always 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

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

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