JavaScript循环条件Abberation

时间:2016-02-04 03:05:07

标签: javascript while-loop

我很好奇为什么这个while循环没有按预期破坏。我的理解是,当使用OR运算符(||)时,如果发现任何条件为假,则循环中断。

但是,我在测试文档中注意到(我第一次学习JS)我的while循环要求在断开之前找到所有条件为假。

这是一个存根示例:

var stringName="", numhours=0, numRate=0;

document.write("Exit at any time by entering -1");
while (stringName != "-1" || numHours != -1 || numRate != -1){
    stringName = prompt("Enter name","");
    numHours = prompt("Enter num hours","");
    numHours = parseFloat(numHours);
    numRate = prompt("Enter rate per hour","");
    numRate = parseFloat(numRate);
}

我希望用户可以在任何阶段输入-1,一旦循环完成,它将再次重新检查条件,并在发现名称不等于&#后为false 34; -1",或者假小时不等于-1,或假工资不等于-1,这将打破循环。

相反,似乎循环要求退出所有这些条件,其中name ==" -1" AND小时== -1 AND工资== -1,只有这样它才会破裂。

任何见解都将受到赞赏。你们摇滚!

3 个答案:

答案 0 :(得分:7)

您向后了解OR运算符。您将其视为AND

而不是:

  

我的理解是,当使用OR运算符(||)时,如果发现任何条件为false,则循环中断。

实际上是

  

如果发现任何条件为真,则循环继续。

要解决此问题,您可以将循环重写为:

while (stringName !== "-1" && numHours !== -1 && numRate !== -1)

此外,最好使用!==代替!=,因为!=执行一些奇怪的称为类型强制的行为,它可以为您提供您不期望的结果。

答案 1 :(得分:5)

你倒退了。如果任一操作数具有“真实”值(||,非 - true等),true运算符的计算结果为null。只有当所有个别不等式测试为while时,您的false循环才会退出。如果您希望在任何 false时退出,请改用&&运算符。

答案 2 :(得分:2)

true||false||false||false||true将循环,直到条件== false。

当我们使用控制台测试时,您的问题可以得到解答: true将评估为{{1}}

因为如果任何一个条件为真,OR语句的结果为真。

Logical OR Operator