Управление циклами: break, continue, метки
🔄 Управление циклами: break, continue, метки
Циклы — это мощный инструмент JavaScript, но иногда стандартного поведения недостаточно. Давайте разберёмся, как управлять их работой с помощью break, continue и меток.
🛑 Оператор break: экстренная остановка
break мгновенно прерывает выполнение цикла. Это как кнопка «Стоп» в микроволновке — не ждёт окончания программы, останавливает прямо сейчас.
Пример с while:
let i = 0;
while (i < 10) {
if (i === 5) {
break; // Выходим из цикла при i = 5
}
console.log(i);
i++;
}
// Выведет: 0, 1, 2, 3, 4
Пример с for:
for (let j = 0; j < 10; j++) {
if (j > 3 && j % 2 === 0) {
break; // Выходим при первой чётной цифре после 3
}
console.log(j);
}
// Выведет: 0, 1, 2, 3, 4
💡
breakособенно полезен при поиске элемента в массиве — как только нашли, можно прервать цикл и сэкономить ресурсы.
⏭️ Оператор continue: пропуск итерации
continue не прерывает цикл полностью, а пропускает текущую итерацию. Представьте, что вы перепрыгиваете через ступеньку на лестнице.
for (let k = 0; k < 10; k++) {
if (k % 2 === 0) {
continue; // Пропускаем чётные числа
}
console.log(k);
}
// Выведет: 1, 3, 5, 7, 9
Реальный кейс: фильтрация данных перед обработкой:
const users = ['Аня', null, 'Петя', undefined, 'Маша'];
for (let user of users) {
if (!user) continue; // Пропускаем пустые значения
console.log(`Привет, ${user}!`);
}
🏷️ Метки: управление вложенными циклами
Метки (labels) позволяют управлять внешними циклами изнутри вложенных. Это как GPS-навигатор для break и continue.
Синтаксис:
имяМетки: for (...) {
// ...
}
Пример с break:
outerLoop: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) {
break outerLoop; // Выходим из обоих циклов
}
console.log(`i=${i}, j=${j}`);
}
}
Пример с continue:
matrixLoop: for (let row = 0; row < 3; row++) {
for (let col = 0; col < 3; col++) {
if (row === col) {
continue matrixLoop; // Пропускаем диагональ
}
console.log(`Обрабатываем [${row}][${col}]`);
}
}
⚠️ Метки используются редко, но в сложных алгоритмах (например, обработка матриц) могут быть спасителями.
🛠️ Практические примеры
1. Поиск простых чисел
nextPrime: for (let num = 2; num < 10; num++) {
for (let div = 2; div < num; div++) {
if (num % div === 0) {
continue nextPrime; // Не простое — переходим к следующему числу
}
}
console.log(`${num} — простое число!`);
}
2. Выход из глубокой вложенности
mainLoop: while (true) {
const input = prompt('Введите "выход", чтобы закончить');
if (input === 'выход') {
break mainLoop;
}
// Другие операции...
}
❓ Частые ошибки
1. Путаница между break и continue:
break— полный выходcontinue— пропуск текущей итерации
2. Метки только для циклов:
label: {
break label; // Работает
console.log('Это не выполнится');
}
3. Использование break в switch:
- В
switchbreakпрерывает только текущийcase, а не окружающий цикл.
🎯 Итоги
1. break — мгновенный выход из цикла
2. continue — пропуск текущей итерации
3. Метки — управление вложенными циклами
4. Используйте их для:
- Оптимизации производительности
- Упрощения сложной логики
- Гибкого управления потоком выполнения