从数组移入和推入时产生无限循环

Infinite loop produced when shifting from and pushing in array

为什么下面的代码会导致无限循环?

const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
while (arr.length > 0) {
  console.log(arr.shift());
  arr.push(arr.shift());
}

您在循环中做的最后一件事是向数组添加一个项目,这意味着数组长度将始终至少为 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;
}

arr.shift() returns undefined 在一个空数组上,所以一旦你移出最后一个原始数字,你就会得到 undefined,然后你推回数组,因此数组的长度永远不会达到零。