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.