首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎么会在这段代码中误用回收站逻辑运算符?

我怎么会在这段代码中误用回收站逻辑运算符?
EN

Stack Overflow用户
提问于 2014-10-24 11:22:46
回答 2查看 30关注 0票数 1
代码语言:javascript
复制
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语句只有两个逻辑运算符,那么问题就没有了。但从我在互联网上读到的情况来看,我不应该限制逻辑运算符之间能放多少东西。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-24 11:25:20

你要找的是:

代码语言:javascript
复制
if (choice1 === "TURN AROUND" || choice1 === "TURN") {

...and等。例如,您必须对||操作符的两边进行比较。请看下面的原因。

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

您的原始表达式的计算如下:

代码语言:javascript
复制
if ((choice1 === "TURN AROUND") || "TURN") {

...which for choice1 = "FOO" (例如)变成:

代码语言:javascript
复制
if (false || "TURN") {

...because choice1不是"TURN AROUND"。这就变成了:

代码语言:javascript
复制
if ("TURN") {

...because operator的工作方式。因为这是事实,所以您可以分支到if块中,即使choice1与这两种方法都不匹配。

票数 2
EN

Stack Overflow用户

发布于 2014-10-24 11:28:52

这里的问题是,在左侧的语句是否为真,或者右边的语句是否为真。因此,如果您的第一个if语句,它测试choice1 ===“转身”是否为真还是“转身”为真。因为您只是检查字符串,所以它始终是正确的。

你在这里要做的是,永远检查一下选择1,如下所示:

代码语言:javascript
复制
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的建议来简化代码:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26546934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档