Ты хотел вывести три предмета из инвентаря. Получил меч, щит, зелье… и 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 — неправда. Цикл останавливается сразу после последнего предмета, как и задумано.
💡 Когда отлаживаешь цикл, проверь не только первый проход, но и последний: с каким индексом он обращается к массиву?
Мини-задачка: сколько раз выполнится первый, неправильный цикл, если массив пустой? Пиши ответ в комментариях 👇