我如何误用 ||这段代码中的逻辑运算符
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
相关文章:
- Javascript逻辑运算符和字符串/数字
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 用于验证JS中逻辑运算符表达式的正则表达式
- 为什么在javascript函数声明中使用逻辑运算符
- 为什么这个while循环不能使用AND逻辑运算符
- 逻辑运算符混淆
- IF ELSEIF语句中的Java脚本逻辑运算符
- 为什么JavaScript中的逻辑运算符是关联的
- 布尔表达式-与AND、OR逻辑运算符混淆以及它们的工作方式
- Javascript 逻辑运算符:多个 ||语法困境
- 我可以在文档中放入逻辑运算符吗.querySelectorAll?如果是,如何
- 如何使用逻辑运算符 JavaScript 或 jQuery
- angularJS-使用逻辑运算符内联的多个过滤器
- 具有逻辑运算符的复杂三元运算符
- Javascript逻辑运算符||将0读取为假值.有什么好办法解决这个问题吗
- 闭包模板中的逻辑运算符
- 在iOS应用程序中动态加载“代码逻辑”是否可行
- Javascript 逻辑运算符
- JS逻辑运算符
- 我如何误用 ||这段代码中的逻辑运算符