Циклы while и do...while удобны, когда количество повторений заранее неизвестно. В отличие от for, где часто задаются границы и счетчик, while больше подходит для “повторять, пока условие истинно”.
while: условие проверяется до итерации
Синтаксис:
while (condition) {
// тело цикла
}
- условие проверяется перед каждой итерацией
- если условие сразу
false, цикл не выполнится ни разу
Пример с счетчиком:
let i = 0;
while (i < 3) {
console.log(i);
i += 1;
}
// 0
// 1
// 2
do…while: минимум одна итерация
Синтаксис:
do {
// тело цикла
} while (condition);
Главное отличие: тело выполняется хотя бы один раз, потому что проверка условия идет после итерации.
let i = 0;
do {
console.log(i);
i += 1;
} while (i < 3);
// 0
// 1
// 2
Пример, где разница заметна:
let x = 10;
while (x < 5) {
console.log("while");
}
do {
console.log("do...while");
} while (x < 5);
// выведется только "do...while"
Когда использовать while и do…while
while удобно, когда:
- проверка условия должна происходить до выполнения логики;
- неизвестно количество повторений;
- повторение зависит от внешнего события или результата вычисления.
do…while удобно, когда:
- тело должно выполниться хотя бы один раз;
- проверка возможна только после выполнения шага (например, после чтения ввода или вычисления результата).
break и continue
И в while, и в do...while работают break и continue.
break
break завершает цикл полностью.
let i = 0;
while (true) {
if (i === 3) break;
console.log(i);
i += 1;
}
// 0 1 2
continue
continue пропускает оставшуюся часть текущей итерации и переходит к следующей.
let i = 0;
while (i < 5) {
i += 1;
if (i === 3) continue;
console.log(i);
}
// 1 2 4 5
В while важно следить за тем, где меняется счетчик. Если continue срабатывает до изменения переменной, цикл может стать бесконечным.
Типичный сценарий: поиск до первого совпадения
while хорошо подходит, когда нужно идти по данным до выполнения условия.
const items = [3, 7, 10, 2, 9];
let i = 0;
let foundIndex = -1;
while (i < items.length) {
if (items[i] === 2) {
foundIndex = i;
break;
}
i += 1;
}
console.log(foundIndex); // 3
Бесконечные циклы: как появляются и как избегать
Бесконечный цикл - когда условие никогда не становится false.
Самая частая причина - забыли изменить переменную, влияющую на условие.
let i = 0;
// while (i < 3) {
// console.log(i);
// } // бесконечный цикл: i не меняется
Еще одна частая причина - continue “перепрыгивает” изменение счетчика.
Надежная привычка:
- сначала изменить счетчик/состояние
- затем использовать
continueили выходить черезbreak
Truthy/Falsy и while
Условие while приводится к boolean. Иногда это удобно, но важно понимать, какие значения считаются falsy.
Пример с уменьшением счетчика:
let attempts = 3;
while (attempts) {
console.log("try", attempts);
attempts -= 1;
}
Здесь цикл завершится, когда attempts станет 0 (а 0 - falsy).
Что стоит запомнить
- while проверяет условие до итерации и может не выполниться ни разу.
- do…while выполняется минимум один раз, потому что проверка после итерации.
- Важно следить за изменением переменных в условии, чтобы не получить бесконечный цикл.
breakостанавливает цикл,continueпропускает текущую итерацию.