在尝试创建使用Javascript验证的问题表单时,我遇到了一个奇怪的问题:
如果我像这样编写验证:
if (typedValue === "myAnswer" && clearedLevels === 1){doStuff}
一切正常。但我想创建几个正确的答案,所以我写道:
if (typedValue === "myAnswer"||"secondAnswer" && clearedLevels === 1){doStuff}
..并且突然之间写入输入表单的任何内容都被接受为答案。
答案 0 :(得分:3)
正确的写作方式是:
if ((typedValue === "myAnswer" || typedValue === "secondAnswer") && clearedLevels === 1) { doStuff() }
您无法将条件(x === y || x === z)
合并为x === y || z
并期望获得相同的结果。
答案 1 :(得分:1)
Javascript中的任何非空字符串都是true
(是的,甚至是字符串"false"
)。由于"secondAnswer
不是空的,因此评估为true
,OR
编辑任何其他条件将导致true
。
由于typedValue
的优先级高于typedValue
,因此您错过了&&
与此文字的比较,并且可能是||
比较的括号:
if ((typedValue === "myAnswer" || typedValue === "secondAnswer") &&
clearedLevels === 1) {
// doStuff
}
答案 2 :(得分:0)
扩展阿卡什·普拉丹回答你可以写
if (typedValue == "myAnswer" || typedValue == "secondAnswer" && clearedLevels == 1) { doStuff() }
但由于它会评估&&
has precedence over the ||
operator
if (typedValue == "myAnswer" || (typedValue == "secondAnswer" && clearedLevels == 1)) { doStuff() }