gpt4 book ai didi

javascript - 逻辑运算符后 Pop 不减少 array.length

转载 作者:行者123 更新时间:2023-11-28 21:13:44 25 4
gpt4 key购买 nike

我有这种奇怪的行为,我从未见过也不理解。我正在使用 arrayname.length 作为 while 循环的控制来遍历数组。通常按预期工作,但当数组的长度没有减少到第一次迭代之后时,这种特殊情况会创建无限循环。

while( data.length > 0){
finalCheck = finalCheck && data.pop();
}

此处,初始长度为 4,finalCheck 从 true 开始。前几个数组元素为 false。

正如第一次迭代所预期的那样,finalCheck 变为 false,data.length 变为 3,但之后的每次迭代,data.length 保持为 3...有人知道为什么会发生这种情况吗?

最佳答案

finalCheck 在某个时刻变为 false,导致 data.pop() 无法执行。然后,循环就变成无限循环。

data.pop() 返回从数组中删除的元素。如果它的值评估为 false,则在下一次迭代时不会删除任何元素,从而导致 data.length 始终大于零。

var data = [0, 1], finalCheck = false;
while( data.length > 0){
finalCheck = finalCheck && data.pop(); //Hello infinite loop
}

在前面显示的示例中,finalCheck 在迭代之前已为 false,导致 data.pop() 永远不会被执行。即使finalCheck初始化为truefinalCheck也会被设置为零,并再次卡住。

要修复您的代码,您至少应该使用:

while( data.length > 0 && finalCheck){
finalCheck = data.pop(); //Bye infinite loop
}

关于javascript - 逻辑运算符后 Pop 不减少 array.length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8086501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com