JavaScript 逻辑运算符 : multiple || syntax dilemma

标签 javascript syntax logical-operators

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/

相关文章:

javascript - 如何从我的 Eclipse 项目中删除 javascript 验证?

syntax - 如何在VHDL中odt_prehh std_logic_vector?

c - 术语和代码行的平等

javascript - Angular2 OR 表达式奇怪的结果

java - 在elasticsearch中构建复合查询

javascript - 如何使用 Sinon 来 stub 发出 REST 请求的调用

javascript - 只是因为将 HTML 嵌套的 div 放在新行上而不断出错

javascript - 排除 "keydown"函数中的键

javascript - mootools 的客户端模板库?

java - for each 循环无法初始化数组中的对象