我有这种奇怪的行为,我从未见过且不了解。我正在遍历使用arrayname.length作为while循环控件的数组。它通常按预期工作,但是这种特殊情况会在数组的长度没有减少到第一次迭代之后就产生一个无限循环。

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


在这里,初始长度为4,finalCheck从true开始。前几个数组元素为假。

如第一次迭代所期望的那样,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 - 逻辑运算符后弹出不减少array.length,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8086501/

10-09 12:55