我对一个简单的 JavaScript 程序有疑问:
var answer = prompt("Are we there yet?");
while(answer != "yes" || answer != "yeah") {
var answer = prompt("Are we there yet?");
}
alert("Yes! We made it!");
问题是,当我在浏览器上运行此程序并输入
"yes"
或 "yeah"
时,提示方法会不断出现,除非我将逻辑运算符从 OR (||
) 更改为 AND (&&
)。
它不应该与 OR (
||
) 一起使用吗?我不是只是说这两个答案中的任何一个都可以并且警报可以运行吗?
你的陈述
answer != "yes" || answer != "yeah"
如果第一个或第二个条件为真,则 为真。在您的情况下,无论
answer
中的文本如何,其中一个条件始终为真。例如:
answer="yes"
那么第二个条件为真answer="yeah"
那么第一个条件为真answer="whatever"
那么两个条件都为真您需要使用的是
&&
:
var answer = prompt("Are we there yet?");
while(answer != "yes" && answer != "yeah") {
var answer = prompt("Are we there yet?");
}
alert("Yes! We made it!");
只有当两个条件都满足时,这才是正确的。例如:
answer="yes"
则第一个条件为假,第二个条件为真。总体结果是错误的,您离开了循环。answer="yeah"
则第一个条件为真,第二个条件为假。总体结果是错误的,您离开了循环。answer="whatever"
则两个条件都为真,并且重复循环。其实你的条件检查是错误的。
这是你的代码片段
var answer = prompt("Are we there yet?");
while(answer != "yes" || answer != "yeah") {
var answer = prompt("Are we there yet?");
}
alert("Yes! We made it!");
在上面的代码片段中,while 条件无论是“yes”还是“yeah”都始终为 true。您正在使用 (||) OR 运算符绑定两个条件检查。
(||) OR 运算是 :-
true || true = true
true || false = true
false || true = true
false || false = false
所以, (answar != "yeah") || (answar != "yeah") 无论您输入 ("yes"、"yeah" 或其他值),都将始终为 true。
只有当条件返回 false 时,while 循环才会中断,但在上面的情况下它总是 true。所以它会产生无限循环。
让我们试试这个:-
var answer = prompt("Are we there yet?");
while(answer != "yes" && answer != "yeah") {
var answer = prompt("Are we there yet?");
}
alert("Yes! We made it!");
由于 (&&) AND 操作行为,一旦提示中给出任何值(“yes”或“yeah”),这将中断无限循环。
(&&) AND 操作行为 :-
true && false = false
false && true = false
false && false = false
true && true = true
所以一旦条件包含任何值(“yes”或“yeah”),条件就会被破坏
它需要是一个“和”,因为要得到循环,你需要答案既不是“是”也不是“是”。如果测试是为了平等而不是不平等,那么你会使用“或”。
为什么不使用递归来实现这个,为了更好地易于理解的条件,JsFiddle
var answer = prompt("Are we there yet?");
func();
function func() {
if (answer == "yes" || answer == "yeah") {
alert("Yes! We made it!");
} else {
answer = prompt("Are we there yet?");
func();
}
}