Learn JavaScript

break и continue в JavaScript

break и continue - ключевые слова для управления выполнением циклов. Они работают в for, while, do...while, а break также используется внутри switch.

Что делает break

break полностью завершает текущий цикл. Управление переходит к коду сразу после цикла.

Пример в for:

for (let i = 0; i < 10; i += 1) {
  if (i === 3) break;
  console.log(i);
}
// 0 1 2

Пример в while:

let i = 0;

while (i < 10) {
  if (i === 3) break;
  console.log(i);
  i += 1;
}
// 0 1 2

Зачем break нужен на практике

Частый сценарий - остановить поиск после первого совпадения.

const items = [7, 4, 9, 2, 8];
let foundIndex = -1;

for (let i = 0; i < items.length; i += 1) {
  if (items[i] === 2) {
    foundIndex = i;
    break;
  }
}

console.log(foundIndex); // 3

Без break цикл продолжил бы выполняться, даже если результат уже найден.

Что делает continue

continue пропускает текущую итерацию и переходит к следующей. Цикл не останавливается, просто “перепрыгивает” оставшийся код внутри тела.

Пример в for:

for (let i = 0; i < 5; i += 1) {
  if (i === 2) continue;
  console.log(i);
}
// 0 1 3 4

Пример в while:

let i = 0;

while (i < 5) {
  i += 1;
  if (i === 3) continue;
  console.log(i);
}
// 1 2 4 5

Для чего continue используют

Частый сценарий - пропуск “неподходящих” элементов.

const items = [3, 0, 7, 0, 2];

for (let i = 0; i < items.length; i += 1) {
  if (items[i] === 0) continue;
  console.log(items[i]);
}
// 3 7 2

Важные нюансы

continue и счетчик в while

В for шаг обычно задан в третьей части, и continue не ломает счетчик. В while изменение счетчика часто находится в теле цикла, и если continue срабатывает до изменения, можно получить бесконечный цикл.

Проблемный пример:

let i = 0;

// while (i < 5) {
//   if (i === 2) continue;
//   i += 1;
// } // бесконечный цикл при i === 2

Исправление - сначала менять i, а потом использовать continue:

let i = 0;

while (i < 5) {
  i += 1;
  if (i === 3) continue;
  console.log(i);
}

break в switch

break в switch нужен, чтобы не произошло fall-through (проваливания) в следующий case.

const status = "ok";
let message;

switch (status) {
  case "ok":
    message = "Done";
    break;
  case "error":
    message = "Error";
    break;
  default:
    message = "Unknown";
}

console.log(message); // "Done"

Альтернативы: когда break/continue можно не использовать

Иногда break и continue делают код менее линейным. В простых задачах бывает проще:

  • заменить continue на if, оборачивающий полезную часть;
  • заменить break на флаг или на return из функции (если цикл находится в функции).

Пример без continue:

const items = [3, 0, 7, 0, 2];

for (let i = 0; i < items.length; i += 1) {
  if (items[i] !== 0) {
    console.log(items[i]);
  }
}

Пример: выход из функции вместо break:

function findIndex(arr, value) {
  for (let i = 0; i < arr.length; i += 1) {
    if (arr[i] === value) return i;
  }
  return -1;
}

console.log(findIndex([7, 4, 9, 2, 8], 2)); // 3

Что стоит запомнить

  • break останавливает цикл полностью.
  • continue пропускает текущую итерацию.
  • В while нужно внимательно следить, где меняется счетчик, иначе легко получить бесконечный цикл.
  • break важен в switch, чтобы не выполнялись лишние case.