Мітка (label) може використовуватися з операторами break та continue. Вона додається попереду виразу у вигляді ідентифікатора, на який можна посилатися.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Заувага: Використання помічених циклів або блоків є дуже нестандартним підходом. Зазвичай використовуються виклики функцій замість стрибків у циклах.
Синтаксис
label : statement
label- Будь-який ідентифікатор JavaScript, який не є зарезервованим словом.
statement- Інструкція JavaScript. Оператор
breakможе використовуватися з будь-якою поміченою конструкцією, а операторcontinueможе використовуватися з поміченими циклами.
Опис
Ви можете використати мітку, щоб ідентифікувати цикл, а потім скористатись операторами break чи continue, щоб вказати, що програма має перервати чи продовжити його виконання.
Зауважте, що у JavaScript немає оператора goto, ви можете використовувати мітки лише з break або continue.
У строгому режимі не можна використовувати "let" в якості імені мітки. Це спричинить викидання SyntaxError (let є зарезервованим ідентифікатором).
Приклади
Використання поміченого continue з циклами for
var i, j;
loop1:
for (i = 0; i < 3; i++) { //Перший цикл for помічений як "loop1"
loop2:
for (j = 0; j < 3; j++) { //Другий цикл for помічений як "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 з циклами for
var i, j;
loop1:
for (i = 0; i < 3; i++) { //Перший цикл for помічений як "loop1"
loop2:
for (j = 0; j < 3; j++) { //Другий цикл for помічений як "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;
}
Використання поміченого блоку з оператором 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
Специфікації
| Специфікація |
|---|
| ECMAScript (ECMA-262) The definition of 'Labelled statement' in that specification. |
Сумісність з веб-переглядачами
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
label | Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 4 | Opera Full support 4 | Safari Full support 1 | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support 10.1 | Safari iOS Full support 1 | Samsung Internet Android Full support 1.0 | nodejs Full support 0.1.100 |
Legend
- Full support
- Full support

