我很好奇为什么这个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,只有这样它才会破裂。
任何见解都将受到赞赏。你们摇滚!
答案 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语句的结果为真。