Ключове слово break
Ключове слово break у JavaScript використовується для переривання виконання циклу або блоку switch раніше, ніж він завершиться природним шляхом. Керування одразу переходить на наступний рядок після конструкції, яку перервали.
Теорія
TL;DR
breakнегайно завершує найближчий цикл або блокswitch.- У циклах він потрібен, щоб зупинити перебір, коли результат уже знайдено.
- У
switchвін не дає виконанню «провалитися» в наступніcase(fall-through). - Ставити
breakможна лише всередині циклу абоswitch, інакше будеSyntaxError. - Щоб пропустити лише одну ітерацію, а не завершити цикл, є
continue. - З міткою
break labelвиходить із зовнішнього циклу, а не з внутрішнього.
Швидкий приклад
for (let i = 0; i < 10; i++) {
if (i === 5) {
break; // stop the loop when i is 5
}
console.log(i);
}
console.log('Цикл завершено');Результат:
0
1
2
3
4
Цикл завершеноЦикл припиняється, щойно i стає рівним 5, і решта ітерацій не виконується.
break у циклах for, while, do...while
break негайно завершує виконання циклу і передає керування на наступний рядок коду після нього. Це основний інструмент для пошуку: щойно потрібний елемент знайдено, немає сенсу перебирати решту.
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Maria' },
];
let found = null;
for (const user of users) {
if (user.id === 2) {
found = user;
break; // no reason to keep scanning
}
}
console.log(found); // { id: 2, name: 'Bob' }Те саме працює у while і do...while. Важливо: break виходить лише з одного, найближчого циклу, тож у вкладених циклах він перерве тільки внутрішній.
break у конструкції switch
Тут break використовується, щоб вийти з блоку switch після виконання потрібного case. Без нього виконання «провалиться» в наступний case.
const day = 2;
switch (day) {
case 1:
console.log('Понеділок');
break;
case 2:
console.log('Вівторок');
break;
case 3:
console.log('Середа');
break;
default:
console.log('Інший день');
}Результат:
ВівторокЯкби в case 2 не було зупинки, виконалися б усі наступні case до найближчого break або до кінця блоку.
break з міткою у вкладених циклах
Якщо треба вийти одразу з кількох рівнів вкладеності, цикл позначають міткою (label) і виходять із неї.
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i * j === 2) break outer; // leave both loops at once
console.log(i, j);
}
}Результат:
0 0
0 1
0 2
1 0
1 1Альтернатива мітці: винести вкладені цикли в окрему функцію і вийти через return; часто це читабельніше.
Порівняння з continue
| Ключове слово | Що робить | Де працює |
|---|---|---|
break | Повністю зупиняє цикл або виходить із switch | Цикли, switch |
continue | Пропускає решту поточної ітерації | Тільки цикли |
Типові помилки
- Використовувати
breakуforEach,mapчиfilter. Це методи, а не цикли, тому будеSyntaxError; для дострокового виходу берітьfor...of,someабоfind. - Забути
breakу гілціswitchі отримати fall-through, тобто виконання кількох гілок замість однієї. - Вважати, що
breakу вкладених циклах вийде з усіх. Він виходить лише з найближчого, для решти потрібна мітка. - Плутати
breakіcontinue: перший завершує цикл, другий лише пропускає крок. - Ставити
breakв умовному блоціifпоза циклом. Поза циклом іswitchце синтаксична помилка. - Розраховувати, що
breakскасує блокfinally: код уtry ... finallyвиконається перед виходом у будь-якому разі.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.