繁体   English   中英

我如何误用|| 这段代码中的逻辑运算符?

[英]How am I mis-using the || logical operator in this piece of code?

var user = prompt("Prose prose prose. Do you SCREAM, TURN AROUND, or RUN").toUpperCase();

switch (user) {
    case 'SCREAM':
        var choice1 = prompt("Prose prose prose. Do you TURN AROUND, PASS OUT, or USE MAGIC").toUpperCase();
            if (choice1 === "TURN AROUND" || "TURN") {
                console.log("Prose prose prose!")

            } else if (choice1 === "PASS_OUT" || "PASS" || "FAINT" || "FEINT") {
                console.log("Prose prose prose.")

            } else if (choice1 === "USE_MAGIC" || "MAGIC" || "SPELL" || "WIZARDRY") {
                console.log("Prose prose prose.")

            } else if (choice1 === "4" && "2" || "42") {
                console.log("Congratulations, You have chosen the secret option! You win!")
            } else {
                console.log("I'm sorry, I didn't understand that. Try again!")
            }
        break;

 //imagine default state and rest of code are here

所以这只是我正在研究的一个非常基本的代码片段。 我遇到的问题是,每当我选择任何“ PASS OUT ”或“ USE MAGIC ”选项时,选项自动默认为“ TURN AROUND ”选项。 现在我发现如果我只有两个逻辑运算符用于else if语句,问题就会消失。 但是从我在互联网上阅读的内容来看,我可以在逻辑运算符之间放置多少内容。 我究竟做错了什么?

您正在寻找:

if (choice1 === "TURN AROUND" || choice1 === "TURN") {

...等等。 例如,您必须在||每一侧进行比较 运营商。 请参阅下文了解原因。

但在这种情况下,我可能会使用另一个switch (可能在一个单独的函数中,以防止事情变得太复杂),或者可能使用查找表。


您的原始表达式的评估方式如下:

if ((choice1 === "TURN AROUND") || "TURN") {

...对于choice1 = "FOO" (例如)变为:

if (false || "TURN") {

...因为choice1不是"TURN AROUND" 然后变成:

if ("TURN") {

...因为奇怪的强大|| 操作员工作。 因为这很简单,即使choice1与其他选项都不匹配,你也会分支到if块。

这里的问题是,|| 运算符测试左边的语句是否为真,或者右边的语句是否为真。 因此,如果是第一个if语句,它会测试choice1 ===“TURN AROUND”是否为真或者如果“TURN”为真。 因为你只是检查一个字符串,它总是如此。

你要做的就是,要经常检查选择1,如下所示:

if(choice1 === "TURN AROUND" || choice1 === "TURN"){
    console.log("Prose prose prose!");
} else if (choice1 === "PASS OUT" || choice1 === "PASS" || choice1 === "FAINT" || choice1 === "FEINT"){
    console.log("Prose prose prose.");
}  // and so on
[...]

您可以使用adeneo的建议来简化您的代码:

if(["TURN AROUND", "TURN"].indexOf(choice1) !== -1){
    console.log("Prose prose prose!");
} else if(["PASS OUT", "PASS", "FAINT", "FEINT"].indexOf(choice1) !== -1){
    console.log("Prose prose prose.");
} // and so on

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM