break и continue
breakнемедленно прерывает выполнение текущего цикла илиswitch, аcontinueпропускает оставшиеся операции текущей итерации и переходит к следующей.
Зачем нужно
break и continue позволяют управлять потоком выполнения циклов без громоздких флаговых переменных. Они делают намерение кода явным: «остановиться здесь» или «пропустить этот элемент». Правильное использование улучшает читаемость и производительность (ранний выход из цикла при поиске).
Где используется
- Досрочный выход из цикла при нахождении нужного элемента (
break) - Пропуск невалидных или нежелательных элементов без вложенных
if(continue) - Выход из
switch-выражения после совпавшего случая - Управление вложенными циклами через метки (labels)
break
// Поиск первого чётного числа
const nums = [1, 3, 7, 4, 9, 2];
let found = null;
for (const n of nums) {
if (n % 2 === 0) {
found = n;
break; // прекратить перебор, как только нашли
}
}
console.log(found); // 4
break в switch
const status = 'error';
switch (status) {
case 'ok':
console.log('Всё хорошо');
break; // без break выполнение провалится в следующий case
case 'error':
console.log('Ошибка');
break;
default:
console.log('Неизвестный статус');
}
continue
// Обработать только нечётные числа
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) continue; // пропустить чётные
console.log(i); // 1, 3, 5, 7, 9
}
// Фильтрация при обходе массива
const users = [
{ name: 'Иван', active: true },
{ name: 'Мария', active: false },
{ name: 'Пётр', active: true },
];
for (const user of users) {
if (!user.active) continue;
console.log(`Привет, ${user.name}!`);
}
// "Привет, Иван!" "Привет, Пётр!"
Метки (Labels) для вложенных циклов
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) break outer; // выйти из обоих циклов
console.log(i, j);
}
}
// 0 0 / 0 1 / 0 2 / 1 0
// continue с меткой
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (j === 1) continue outer; // перейти к следующей итерации внешнего цикла
console.log(i, j);
}
}
// 0 0 / 1 0 / 2 0
Частые ошибки
- Забытый
breakвswitch— провал (fallthrough) к следующемуcaseявляется распространённым источником багов. - Использование
break/continueвне цикла илиswitch— вызываетSyntaxError. continueс forEach —continueне работает внутриArray.prototype.forEach; используйте обычныйfor/for...ofили вернитеreturnдля пропуска.
Связанные темы
- _MOC JavaScript
- Блочная область видимости -- let и const
- Методы массивов -- find, some, every, includes