Javascript 将OR运算符添加到测验表单会使其接受任何答案

Javascript 将OR运算符添加到测验表单会使其接受任何答案,javascript,jquery,if-statement,Javascript,Jquery,If Statement,我在尝试创建一个通过Javascript验证的问题表单时遇到了一个奇怪的问题: 如果我这样写验证: if (typedValue === "myAnswer" && clearedLevels === 1){doStuff} 一切正常。但我想创造几个正确的答案,所以我写道: if (typedValue === "myAnswer"||"secondAnswer" && clearedLevels === 1){doStuff} …突然间,任何写入输入表单的

我在尝试创建一个通过Javascript验证的问题表单时遇到了一个奇怪的问题:

如果我这样写验证:

if (typedValue === "myAnswer" && clearedLevels === 1){doStuff}
一切正常。但我想创造几个正确的答案,所以我写道:

 if (typedValue === "myAnswer"||"secondAnswer" && clearedLevels === 1){doStuff}

…突然间,任何写入输入表单的内容都被接受为答案。

正确的书写方式是:

if ((typedValue === "myAnswer" || typedValue === "secondAnswer") && clearedLevels === 1) { doStuff() }

不能将条件
(x==y | | x==z)组合为
x==y | | z
,并期望得到相同的结果。

正确的编写方法是:

if ((typedValue === "myAnswer" || typedValue === "secondAnswer") && clearedLevels === 1) { doStuff() }

不能将条件
(x===y | | | x==z)组合为
x===y | | | z
,并期望得到相同的结果。

Javascript中的任何非空字符串都是
真的
(是的,甚至字符串
“假”
)。由于
“second answer
不是空的,因此它的计算结果为
,并且
与任何其他条件合并将导致

由于
&
|
具有更高的优先级,因此您缺少将
typedValue
与此文本进行比较,并且可能缺少
typedValue
比较前后的括号:

if ((typedValue === "myAnswer" || typedValue === "secondAnswer") && 
    clearedLevels === 1) {
    // doStuff
}

Javascript中的任何非空字符串都是
true
(是的,甚至字符串
“false”
)。由于
“second answer
不是空的,它的计算结果为
true
,并且
与任何其他条件一起使用将导致
true

由于
&
|
具有更高的优先级,因此您缺少将
typedValue
与此文本进行比较,并且可能缺少
typedValue
比较前后的括号:

if ((typedValue === "myAnswer" || typedValue === "secondAnswer") && 
    clearedLevels === 1) {
    // doStuff
}

扩展阿卡什·普拉丹的答案,你可以写出来

if (typedValue == "myAnswer" || typedValue == "secondAnswer" && clearedLevels == 1) { doStuff() }
但既然它会评估

  if (typedValue == "myAnswer" || (typedValue == "secondAnswer" && clearedLevels == 1)) { doStuff() }

扩展阿卡什·普拉丹的答案,你可以写出来

if (typedValue == "myAnswer" || typedValue == "secondAnswer" && clearedLevels == 1) { doStuff() }
但既然它会评估

  if (typedValue == "myAnswer" || (typedValue == "secondAnswer" && clearedLevels == 1)) { doStuff() }