var choice1 = prompt("Enter choice 1");
var choice2 = prompt("Enter choice 2");
if (choice1 === "x" && choice2 === ("a" || "b" || "c")) {
alert("Good job!");
}
假设用户输入x
表示选择1
,输入c
表示选择2。
上面是一个简单的例子来强调我的问题。我知道这不起作用,但我的问题是为什么? JavaScript 不会将 ()
中的多个 ||
语句与 choice2
进行比较。为什么不?我心中的逻辑是 choice2
与 "a"
或 "b"具有相同的类型和值 (
或===
) “c”
。
我让它工作的方式是这样的:
(choice1 === "x"&& ((choice2 === "a") || (choice2 === "b") || (choice3 === "c"));
请帮助我理解为什么在使用多个 ||
时,您需要显式写出每个 ||
场景,而不是在 中放入一堆内容()
当我尝试向上时。谢谢。
最佳答案
这样不行,您不能使用 OR 将一个值与多个其他值进行比较,您必须单独比较每个值。
最接近的是使用 Array.indexOf
if ( ['a', 'b', 'c'].indexOf(choice2) != -1 )
它不起作用的原因是因为 OR 和 AND 检查真值,所以在
('a' || 'b' || 'c') // return "a"
a
是一个真值,所以 OR 永远不会继续,也不必继续,它已经有一个真值,所以表达式为真,你只剩下 a
,其余的被丢弃
关于JavaScript 逻辑运算符 : multiple || syntax dilemma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28695290/