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语句只有两个逻辑运算符,那么问题就没有了。但从我在互联网上读到的情况来看,我不应该限制逻辑运算符之间能放多少东西。我做错了什么?
发布于 2014-10-24 11:25:20
你要找的是:
if (choice1 === "TURN AROUND" || choice1 === "TURN") {...and等。例如,您必须对||操作符的两边进行比较。请看下面的原因。
但是在这种情况下,我可能会使用另一个switch (可能在一个单独的函数中,以防止事情变得太复杂),或者可能使用一个查找表。
您的原始表达式的计算如下:
if ((choice1 === "TURN AROUND") || "TURN") {...which for choice1 = "FOO" (例如)变成:
if (false || "TURN") {...because choice1不是"TURN AROUND"。这就变成了:
if ("TURN") {...because operator的工作方式。因为这是事实,所以您可以分支到if块中,即使choice1与这两种方法都不匹配。
发布于 2014-10-24 11:28:52
这里的问题是,在左侧的语句是否为真,或者右边的语句是否为真。因此,如果您的第一个if语句,它测试choice1 ===“转身”是否为真还是“转身”为真。因为您只是检查字符串,所以它始终是正确的。
你在这里要做的是,永远检查一下选择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 onhttps://stackoverflow.com/questions/26546934
复制相似问题