Цикл for
Цикл for
Технический фундамент цикла for
for - это цикл со встроенной моделью управления состоянием итерации: инициализация, проверка условия и шаг обновления.
Технически он удобен там, где нужно явно контролировать индекс, границы и порядок обхода.
Ключевой момент: for дает полный контроль над счетчиком и критерием остановки.
Проверь себя: почему писать 100 однотипных строк вручную хуже, чем один цикл for?
Структура цикла for
for (инициализация; условие; шаг) {
// тело цикла
}
Пример:
for (let i = 0; i < 3; i++) {
console.log(i);
}
let i = 0- старт счетчика;i < 3- условие продолжения;i++- изменение счетчика после каждой итерации.
Смотри, что важно: если условие всегда истинно, получишь бесконечный цикл.
Работа со счетчиком
Счетчик обычно используется для доступа к элементам массива по индексу.
const scores = [50, 72, 90];
for (let i = 0; i < scores.length; i++) {
console.log(scores[i]);
}
Здесь часто путаются с границами: i <= scores.length приведет к лишней итерации и undefined.
Проверь себя: почему условие должно быть именно < length, а не <= length?
Итерация в обратном порядке (с конца массива)
Иногда нужно пройти массив от последнего элемента к первому: например, чтобы обработать свежие данные раньше старых или безопасно удалять элементы по условию.
const logs = ['old', 'mid', 'new'];
for (let i = logs.length - 1; i >= 0; i--) {
console.log(i, logs[i]);
}
Ключевые правила:
- стартуй с
length - 1, потому что последний валидный индекс именно такой; - условие делай
i >= 0, чтобы не пропустить нулевой индекс; - шаг в обратную сторону:
i--.
Проверь себя: что сломается, если начать с i = logs.length?
Мини-сценарий: подсчет суммы
const prices = [100, 250, 80];
let total = 0;
for (let i = 0; i < prices.length; i++) {
total += prices[i];
}
console.log(total); // 430
Это классическая прикладная задача: пройти по списку и накопить результат.
Прерывание и пропуск итераций
break- остановить цикл полностью;continue- перейти к следующей итерации.
for (let i = 0; i < 10; i++) {
if (i === 5) break;
if (i % 2 === 0) continue;
console.log(i);
}
Смотри, что важно: эти операторы полезны, но могут ухудшить читаемость, если их слишком много.
Дополнительный пример для новичка: поиск с конца массива
const nums = [5, -2, -1, 8, -3];
let lastPositive = null;
for (let i = nums.length - 1; i >= 0; i--) {
if (nums[i] > 0) {
lastPositive = nums[i];
break;
}
}
console.log(lastPositive); // 8
Здесь for в обратном порядке решает конкретную задачу: быстро найти последний подходящий элемент без полного прохода массива.
Частые ошибки новичков
- Неверная граница цикла (
<=вместо<). - Забытый шаг счетчика (
i++) и бесконечный цикл. - Изменение счетчика в нескольких местах одновременно.
- Для обратного прохода старт с
lengthвместоlength - 1. - Для обратного прохода условие
i > 0, которое пропускает индекс0. - Использование
forтам, где без индекса лучшеfor...of.
Анти-провал: перед запуском цикла ответь себе на три вопроса: с чего начинаю, до какого условия и как меняю счетчик.
Что будет, если изменить входные данные
Если массив пустой, цикл просто не выполнится - это нормальный edge case. Если в массиве есть undefined, сумма может стать NaN, значит иногда нужно дополнительно проверять элементы перед арифметикой.
Например, можно пропускать некорректные элементы:
let total = 0;
for (let i = 0; i < prices.length; i++) {
const price = Number(prices[i]);
if (!Number.isFinite(price)) continue;
total += price;
}
Проверь себя: как защитить сумму от некорректных элементов в массиве?
Краткий итог
forудобен для повторений с явным счетчиком.- Он особенно полезен для прохода по массивам с индексом.
- Для обратного обхода массива используй старт
length - 1, условие>= 0и шагi--. - Границы и шаг цикла критичны для корректности.
break/continueдают контроль потока, но требуют аккуратности.- Четкий
for-цикл делает обработку коллекций предсказуемой и удобной для отладки.