可以“或”用于while循环的逻辑测试吗?

时间:2014-07-22 19:54:00

标签: javascript while-loop comparison logical-operators

不确定为什么这似乎仅适用于回复"是"(或"是" /"是") - 任何帮助将不胜感激。对此很新!

var yesNo = window.prompt("Are you from Earth?");

var lowerYesNo = yesNo.toLowerCase();

while (lowerYesNo != ("yes" || "no")){
    yesNo = window.prompt("Please answer with \"Yes\" or \"No\". Are you from Earth?");
    lowerYesNo = yesNo.toLowerCase();
}

switch (lowerYesNo){
    case "yes":
        window.alert("I thought so!");
        break;
    case "no":
        window.alert("Capture the alien!!!");
        break;
    default:
        window.alert("I don't know how you got this to display!");
}

6 个答案:

答案 0 :(得分:2)

"yes" || "no"

返回“yes”,因为它是一个“truthy”值,因此返回||的第一个操作数。

如果要与两个值进行比较,则需要将其拆分为两个单独的比较:

while (lowerYesNo != "yes" && lowerYesNo != "no")) {
//...

答案 1 :(得分:0)

正确的写作方式是

while (lowerYesNo !== 'yes' && lowerYesNo !== 'no') {
  // ...
}

答案 2 :(得分:0)

你可以试试这个, ((lowerYesNo!=“是”)&&(lowerYesNo!=“no”)){

答案 3 :(得分:0)

你可能想做的是:

while (!(lowerYesNo == "yes" || lowerYesNo == "no")){
    ...

相同
while (lowerYesNo != "yes" && lowerYesNo != "no"){
    ...

同时,请注意:

(x || y) // this expression will return x, if x is truthy otherwise y

(x && y) // this expression will return x, if x is falsy, otherwise it returns y

因此,你问题中的循环等同于:

while (lowerYesNo != "yes"){
    ... // you must say "yes" else you're stuck in here.
}

答案 4 :(得分:-1)

是的它可以,但它需要是一个完整的表达

while( expression1 || expression2)

所以在你的情况下,它将是

while (lowerYesNo != "yes" || lowerYesNo != "no")

虽然在这种情况下已经指出过你可能想要使用&&,因为你只是在尝试打印消息时(不是,而不是否)

答案 5 :(得分:-1)

因为评价表达式

 "yes" || "no"

结果

 "yes"

根据javascript规则评估"或"操作