Последнее, что вы делаете в цикле, это добавление элемента в массив, то есть длина массива всегда будет по крайней мере 1. Т.е., arr.length > 0
всегда оценивается как true
.
Редактировать : Добавление примера, чтобы показать, что происходит. В конце концов, arr.shift()
оценивается как undefined
, когда в массиве ничего не осталось, а затем вы толкаете undefined
обратно в массив, делая длину массива на 1 элемент длинной. Смотрите вывод консоли ниже.
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let i = 0;
while (arr.length > 0 && i < 50) {
arr.shift();
arr.push(arr.shift());
console.log(arr);
i = i + 1;
}