for, while, do...while
for, while, do…while
Цикл for
Классический цикл со счётчиком. Используйте когда знаете количество итераций заранее:
// Синтаксис: for (инициализация; условие; обновление)
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
// Обратный отсчёт
for (let i = 10; i >= 0; i--) {
console.log(i);
}
// Итерация по массиву с индексом
const fruits = ['яблоко', 'банан', 'вишня'];
for (let i = 0; i < fruits.length; i++) {
console.log(`${i}: ${fruits[i]}`);
}
Все три части for необязательны:
let i = 0;
for (; i < 3;) { // пустая инициализация и обновление
console.log(i);
i++;
}
// Бесконечный цикл (выход через break)
for (;;) {
if (someCondition) break;
doWork();
}
Цикл while
Используйте когда не знаете количество итераций заранее — цикл продолжается пока условие истинно:
// Чтение до конца данных
let line = readLine();
while (line !== null) {
process(line);
line = readLine();
}
// Числовой пример
let n = 1;
while (n < 100) {
n *= 2;
}
console.log(n); // 128 — первое число >= 100, которое степень 2
Убедитесь, что в теле цикла
while условие когда-нибудь становится ложным — иначе бесконечный цикл заморозит вкладку браузера.Цикл do…while
Тело выполняется МИНИМУМ ОДИН РАЗ — проверка условия происходит после итерации:
// Запрос ввода — выполняется хотя бы раз
let userInput;
do {
userInput = prompt('Введите число от 1 до 10');
} while (userInput < 1 || userInput > 10);
// Обработка с гарантированным первым выполнением
let result = 0;
let value = getValue();
do {
result += value;
value = getValue();
} while (value > 0);
Когда что использовать
| Цикл | Когда использовать |
|---|---|
for | Известное количество итераций, нужен индекс |
while | Неизвестное количество итераций, условие проверяется до |
do...while | Нужно выполнить хотя бы раз |
Современные JavaScript движки (V8) оптимизируют оба типа цикла практически одинаково. Разница незначительна. Выбирайте исходя из читаемости и семантики, не производительности.
Исключение: кэширование arr.length в for цикле исторически давало прирост, но сегодня V8 оптимизирует это автоматически. Тем не менее, явное кэширование делает намерение понятным.