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
语句,问题就会消失。但是从我在互联网上阅读的内容来看,我可以在逻辑运算符之间放置多少内容。我究竟做错了什么?
答案 0 :(得分:2)
您正在寻找:
if (choice1 === "TURN AROUND" || choice1 === "TURN") {
......等等。例如,您必须在||
运算符的每一侧进行比较。请参阅下文了解原因。
但在这种情况下,我可能会使用另一个switch
(可能在一个单独的函数中,以防止事情变得太复杂),或者可能使用查找表。
您的原始表达式的评估如下:
if ((choice1 === "TURN AROUND") || "TURN") {
... choice1 = "FOO"
(例如)变为:
if (false || "TURN") {
...因为choice1
不是"TURN AROUND"
。然后变成:
if ("TURN") {
...因为curiously-powerful ||
operator的工作方式。由于这个问题,即使if
与其中任何一种方法都不匹配,您也可以加入choice1
区块。
答案 1 :(得分:1)
这里的问题是,||运算符测试左边的语句是否为真,或者右边的语句是否为真。因此,如果是第一个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