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