Все истории

🚧 Цикл работал идеально, пока не появился знак <=

Копия публикации из архива канала. Дата и текст сохранены.

Ты хотел вывести три предмета из инвентаря. Получил меч, щит, зелье… и undefined.
Секретный лут? Нет, лишний проход цикла 🙃
const items = ["Меч", "Щит", "Зелье"];

for (let i = 0; i <= items.length; i++) {
console.log(items[i]);
}
Ловушка — в словах «меньше ИЛИ РАВНО».

В массиве три элемента, но их индексы — 0, 1, 2. Нумерация начинается с нуля, поэтому длина массива — не индекс последнего элемента.

После зелья счётчик становится равен 3. Цикл проверяет 3 <= 3 — всё верно, можно идти дальше!

И обращается к items[3]. Такого элемента здесь нет, поэтому JavaScript возвращает undefined. Само по себе это чтение не вызывает ошибку — баг может тихо поехать дальше по программе.

Убираем = из условия:
for (let i = 0; i < items.length; i++) {
console.log(items[i]);
}
Теперь 3 < 3 — неправда. Цикл останавливается сразу после последнего предмета, как и задумано.

💡 Когда отлаживаешь цикл, проверь не только первый проход, но и последний: с каким индексом он обращается к массиву?

Мини-задачка: сколько раз выполнится первый, неправильный цикл, если массив пустой? Пиши ответ в комментариях 👇