--- title: Мітка slug: Web/JavaScript/Reference/Statements/label tags: - JavaScript translation_of: Web/JavaScript/Reference/Statements/label ---
Мітка (label) може використовуватися з операторами {{jsxref("Statements/break", "break")}} та {{jsxref("Statements/continue", "continue")}}. Вона додається попереду виразу у вигляді ідентифікатора, на який можна посилатися.
Заувага: Використання помічених циклів або блоків є дуже нестандартним підходом. Зазвичай використовуються виклики функцій замість стрибків у циклах.
label : statement
labelstatementbreak може використовуватися з будь-якою поміченою конструкцією, а оператор continue може використовуватися з поміченими циклами.Ви можете використати мітку, щоб ідентифікувати цикл, а потім скористатись операторами break чи continue, щоб вказати, що програма має перервати чи продовжити його виконання.
Зауважте, що у JavaScript немає оператора goto, ви можете використовувати мітки лише з break або continue.
У строгому режимі не можна використовувати "let" в якості імені мітки. Це спричинить викидання {{jsxref("SyntaxError")}} (let є зарезервованим ідентифікатором).
continue з циклами forvar 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 з циклами forvar 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() {}
Однак, у строгому режимі це викине помилку {{jsxref("SyntaxError")}}:
'use strict';
L: function F() {}
// SyntaxError: functions cannot be labelled
Функції-генератори також не можуть мати мітки ні у строгому, ні у звичайному режимі:
L: function* F() {}
// SyntaxError: generator functions cannot be labelled
| Специфікація |
|---|
| {{SpecName('ESDraft', '#sec-labelled-statements', 'Labelled statement')}} |
{{Compat("javascript.statements.label")}}