为什么这个 while 循环不能与 AND 逻辑运算符一起使用?

问题描述 投票:0回答:4

我对一个简单的 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 (

||
) 一起使用吗?我不是只是说这两个答案中的任何一个都可以并且警报可以运行吗?

javascript while-loop boolean-logic
4个回答
5
投票

你的陈述

answer != "yes" || answer != "yeah"
如果第一个或第二个条件为真,则

为真。在您的情况下,无论

answer
中的文本如何,其中一个条件始终为真。例如:

  • if
    answer="yes"
    那么第二个条件为真
  • if
    answer="yeah"
    那么第一个条件为真
  • if
    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!");

只有当两个条件都满足时,这才是正确的。例如:

  • if
    answer="yes"
    则第一个条件为假,第二个条件为真。总体结果是错误的,您离开了循环。
  • if
    answer="yeah"
    则第一个条件为真,第二个条件为假。总体结果是错误的,您离开了循环。
  • if
    answer="whatever"
    则两个条件都为真,并且重复循环。

1
投票

其实你的条件检查是错误的。

这是你的代码片段

 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”),条件就会被破坏


0
投票

它需要是一个“和”,因为要得到循环,你需要答案既不是“是”也不是“是”。如果测试是为了平等而不是不平等,那么你会使用“或”。


-1
投票

为什么不使用递归来实现这个,为了更好地易于理解的条件,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();
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.