Learning Book

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 оптимизирует это автоматически. Тем не менее, явное кэширование делает намерение понятным.