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

Why is this while loop not working with an AND logical operator?

提问人:Kevin Liu 提问时间:5/4/2016 最后编辑:mkrieger1Kevin Liu 更新时间:11/14/2023 访问量:2751

问:

我对一个简单的 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!");

问题是,当我在浏览器上运行它并键入 either 或提示方法时,除非我将逻辑运算符从 OR () 更改为 AND (),否则提示方法会不断出现。"yes""yeah"||&&

它不应该与 OR () 一起使用吗?我不是说这两个答案中的任何一个都可以,警报可以运行吗?||

javascript while-loop 布尔逻辑

评论

0赞 Krupesh Kotecha 5/4/2016
您正在执行基于答案变量的循环。答案变量中的值为“yes”或“yes”。两者同时是不可能的。但是当您应用 AND 运算符时,它会检查答案值“yes”和“yes”,这是不可能的。这就是您的循环无法正常工作的原因

答:

5赞 dotnetom 5/4/2016 #1

您的声明

answer != "yes" || answer != "yeah"

如果第一个条件或第二个条件为 true,则为 true。在您的情况下,无论其中一个条件中的文本如何,都将始终为真。例如:answer

  • 如果则第二个条件为真answer="yes"
  • 如果 THEN 第一个条件为 TRUEanswer="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!");

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

  • 如果第一个条件为 false,第二个条件为 true。总体结果为 false,您将离开循环。answer="yes"
  • 如果,则第一个条件为 true,第二个条件为 false。总体结果为 false,您将离开循环。answer="yeah"
  • 如果两个条件都为真,则重复循环。answer="whatever"
0赞 Warren Dew 5/4/2016 #2

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

-1赞 nisar 5/4/2016 #3

你为什么不用递归来做这个,为了更好、更容易理解的条件,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();
  }
}
1赞 Pawan Kashyap 5/4/2016 #4

实际上,您的状况检查是错误的。

这是您的代码片段

 var answer = prompt("Are we there yet?");

 while(answer != "yes" || answer != "yeah") {
    var answer = prompt("Are we there yet?");
  }

  alert("Yes! We made it!");

在上面的代码片段中,无论条件是“是”还是“是”,条件都将始终为真。您正在绑定两个条件检查(||)OR 运算符。

的 (||)OR 操作是:-

true  || true = true
true  || false = true
false || true = true
false || false = false

所以 (answar != “是的) ||(answar != “yes”) 将始终为 true,或者您键入 (“yes”、“yes” 或其他值)。

只有当条件返回 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”或“yes”),这将打破无限循环。

(&&)AND 操作行为 :-

true && false = false
false && true = false
false && false = false
true  && true = true 

因此,一旦它包含任何值(“yes”或“yes”),条件就会中断