提问人:Kevin Liu 提问时间:5/4/2016 最后编辑:mkrieger1Kevin Liu 更新时间:11/14/2023 访问量:2751
为什么这个 while 循环不能与 AND 逻辑运算符一起使用?
Why is this while loop not working with an AND logical operator?
问:
我对一个简单的 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 () 一起使用吗?我不是说这两个答案中的任何一个都可以,警报可以运行吗?||
答:
您的声明
answer != "yes" || answer != "yeah"
如果第一个条件或第二个条件为 true,则为 true。在您的情况下,无论其中一个条件中的文本如何,都将始终为真。例如:answer
- 如果则第二个条件为真
answer="yes"
- 如果 THEN 第一个条件为 TRUE
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!");
只有当这两个条件都满足时,这才是正确的。例如:
- 如果第一个条件为 false,第二个条件为 true。总体结果为 false,您将离开循环。
answer="yes"
- 如果,则第一个条件为 true,第二个条件为 false。总体结果为 false,您将离开循环。
answer="yeah"
- 如果两个条件都为真,则重复循环。
answer="whatever"
它必须是一个“和”,因为要获得循环,你需要的答案既不是“是”也不是“是”。如果测试是相等而不是不平等,那么你会使用“或”。
你为什么不用递归来做这个,为了更好、更容易理解的条件,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();
}
}
实际上,您的状况检查是错误的。
这是您的代码片段
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”),条件就会中断
评论