Эта статья нуждается в редакционном обзоре. Как вы можете помочь.
Сводка
Инструкция метки (label) используется вместе с break
или continue
для альтернативного выхода из цикла. Оно добавляется перед блочным выражением в качестве ссылки, которая может быть использована в дальнейшем.
Синтаксис
label : statement
-
label
- Любой идентификатор JavaScript, который не является ключевым словом.
-
statement
-
Инструкция.
break
может быть использован с любой отмеченной инструкцией, аcontinue
только с метками около начала цикла.
Описание
Вы можете применять метки для обозначения циклов, чтобы затем при помощи break
или continue
выходить из цикла или продолжать его работу с новой итерации.
В JavaScript нет оператора goto
, вы можете использовать только метки с break
или continue
.
Избегайте использования меток
Метки редко используются в коде на JavaScript, так как они делают его сложнее в чтении и понимании. Старайтесь использовать вместо них другие конструкции языка, такие как вызовы функций или выбрасывание ошибок.
Примеры
Использование метки с continue
с циклом for
var 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
На входе массив элементов и массив функций для проверки, в примере вычисляется количество элементов массива, которые проходят все тесты.
var itemsPassed = 0; var 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
var 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
Дан массив элементов и массив с функциями для проверки, в примере определяется, проходят ли все элементы первого массива все тесты из второго массива.
var allPass = true; var i, j; top: for (i = 0; items.length; i++) for (j = 0; j < tests.length; i++) if (!tests[j].pass(items[i])){ allPass = false; break top; }
Спецификации
Спецификация | Статус | Комментарии |
---|---|---|
ECMAScript 3-е Издание. | Стандарт | Изначальное определение. Реализован в JavaScript 1.2. |
ECMAScript 5.1 (ECMA-262) Определение 'Labelled statement' в этой спецификации. |
Стандарт | |
ECMAScript 6 (ECMA-262) Определение 'Labelled statement' в этой спецификации. |
Кандидат в рекомендации |
Совместимость с браузерами
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) |
Возможность | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | (Да) | (Да) | (Да) | (Да) | (Да) | (Да) |