所以,我团队的一名初级程序员今天编写了以下代码:
if(status === ("incomplete" || "unknown"))
这显然不会按照他的意图行事,这就是:
if(status === "incomplete" || status === "unknown"))
但我无法解释的是为什么第一段代码无法正常工作!或者,如果'status'设置为'incomplete',则为什么评估为true;如果将'status'设置为'unknown',则评估为false ...
答案 0 :(得分:20)
在JavaScript中,||
运算符返回其第一个操作数(如果它的计算结果为true
(即它不是false
,null
,undefined
,{ {1}}或""
),否则为第二个操作数。
在第一种情况下,0
始终评估为("incomplete" || "unknown")
,因为它的计算结果为真。
然后整个条件变为:
"incomplete"
这解释了您正在观察的行为。
答案 1 :(得分:6)
("incomplete" || "unknown")
将返回"incomplete"
,与status
进行比较。
答案 2 :(得分:3)
但我无法解释的是为什么
status === ("incomplete" || "unknown")
无法正常工作
那是因为首先评估括号中的表达式。非空字符串incomplete
是真实的,因此OR-expression ("incomplete" || "unknown")
会产生"incomplete"
,然后只会将其与您的status
变量进行比较。
要缩短条件,there are many ways包括值数组,正则表达式测试等。