Оператор label
Оператор label (або мітка) - це рідкісний і маловживаний інструмент у JavaScript, який дозволяє давати ім'я блоку коду або циклу, а потім керувати виконанням за допомогою break або continue, вказуючи, який саме цикл перервати чи продовжити.
Синтаксис
labelName: {
// інструкції
}Або найчастіше:
labelName:
for (let i = 0; i < 5; i++) {
...
}Навіщо потрібен label
Зазвичай використовується, коли є вкладені цикли, і потрібно вийти не лише з внутрішнього, а й із зовнішнього циклу одразу.
Без міток break і continue впливають лише на найближчий цикл.
Приклад без мітки
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) break;
console.log(`i = ${i}, j = ${j}`);
}
}Результат:
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 1, j = 0Тут break зупиняє лише внутрішній цикл, а зовнішній (i) продовжується.
Приклад з міткою (label)
outerLoop: // мітка для зовнішнього циклу
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) break outerLoop;
console.log(`i = ${i}, j = ${j}`);
}
}Результат:
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 1, j = 0Тут break outerLoop перериває весь зовнішній цикл, а не тільки внутрішній.
Приклад з continue і міткою
Можна також пропустити ітерацію зовнішнього циклу, якщо виконується умова:
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (j === 2) continue outer; // пропускає поточний i
console.log(`i = ${i}, j = ${j}`);
}
}Результат:
i = 0, j = 0
i = 0, j = 1
i = 1, j = 0
i = 1, j = 1
i = 2, j = 0
i = 2, j = 1Важливо
- Мітки не створюють нових областей видимості: це просто імена, до яких можна звертатися через
breakабоcontinue. - Не можна використовувати
labelдля довільних переходів, якgotoв інших мовах (наприклад, C). - Код з мітками часто вважається менш читабельним, і його використовують вкрай рідко: лише якщо без них не можна елегантно вийти з вкладених циклів.
Коротко запам'ятати
| Що робить | Приклад |
|---|---|
| Дає ім'я циклу або блоку | outer: for (...) { ... } |
| Дозволяє вийти із зовнішнього циклу | break outer; |
| Дозволяє пропустити ітерацію зовнішнього циклу | continue outer; |
| Не створює нову область видимості | Так |
| Використовувати часто? | Ні, лише за потреби |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.