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 с forEachcontinue не работает внутри Array.prototype.forEach; используйте обычный for/for...of или верните return для пропуска.

Связанные темы

Ресурсы