为什么下面的代码会导致无限循环?
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
while (arr.length > 0) {
console.log(arr.shift());
arr.push(arr.shift());
}
答案 0 :(得分:4)
循环中的最后一件事是向数组添加一个项,这意味着数组长度将始终至少为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;
}
答案 1 :(得分:3)
arr.shift()
在一个空数组上返回undefined
,因此,当移出最后一个原始数字后,您将得到undefined
,然后将其推回到数组中,因此数组永远不会达到零的长度。