This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Метка
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. Они выступают в роли идентификатора инструкции, на который можно сослаться.
In this article
Интерактивный пример
let str = "";loop1: for (let i = 0; i < 5; i++) { if (i === 1) { continue loop1; } str = str + i;}console.log(str);// Expected output: "0234"Синтаксис
label: statement;Описание
Вы можете использовать метки для обозначения циклов, чтобы затем при помощиbreak илиcontinue выходить из цикла или продолжать его работу с новой итерации соответственно.
Обратите внимание, в JavaScriptотсутствует операторgoto, вы можете использовать метки только сbreak илиcontinue.
Встрогом режиме использование слова "let" в качестве имени метки запрещено — вы получите ошибкуSyntaxError (потому чтоlet является ключевым словом в новых стандартах JavaScript).
Примеры
>Использование метки с оператором continue в цикле
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
В примере по массиву элементов и массиву тест-функций вычисляется количество элементов, которые проходят все тесты.
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 в цикле
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
В примере по массиву элементов и массиву тест-функций определяется, все ли элементы проходят все тесты.
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.
foo: { console.log("привет"); break foo; console.log("эта строка не будет исполнена");}console.log("мир");// Вывод:// "привет"// "мир"Объявление функций с меткой
Начиная с ECMAScript 2015, объявление функции с меткой допускается только в обычном режимедля совместимости с этой нестандартной, но реализованной в некоторых браузерах, возможностью.
L: function F() {}Однако встрогом режиме такой код вызовет ошибкуSyntaxError:
"use strict";L: function F() {}// SyntaxError: functions cannot be labelledОбъявлениефункций-генераторов с меткой не допускается ни в обычном, ни в строгом режимах:
L: function* F() {}// SyntaxError: generator functions cannot be labelledСпецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-labelled-statements> |