从数组移入和推入时产生无限循环
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
,然后你推回数组,因此数组的长度永远不会达到零。
为什么下面的代码会导致无限循环?
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
,然后你推回数组,因此数组的长度永远不会达到零。