使用OR运算符检查变量值

mol*_*oko 13 javascript

所以,我团队的一名初级程序员今天编写了以下代码:

if(status === ("incomplete" || "unknown"))
Run Code Online (Sandbox Code Playgroud)

这显然不会按照他的意图去做,这是:

if(status === "incomplete" || status === "unknown"))
Run Code Online (Sandbox Code Playgroud)

但我无法解释的是,为什么第一段代码无法正常工作!或者,如果'status'设置为'incomplete',则为什么评估为true;如果设置为'unknown',则为false

Jer*_*man 20

在JavaScript中,||如果计算结果为操作员返回其第一操作数true(即,它不是false,null,undefined,"",或0),并且它的第二个操作数,否则.

在第一种情况下,("incomplete" || "unknown")始终求值为"incomplete",因为它的计算结果为true.

整个条件变为:

if (status === "incomplete")
Run Code Online (Sandbox Code Playgroud)

这解释了您正在观察的行为.

  • "...如果它的值为'true`则返回它的第一个操作数......"我将它改为"如果它是真的那么返回它的第一个操作数",你的括号基本上解释了这一点,但是"truthy"和"falsey"是最常用来表达这个概念的词. (2认同)

ins*_*ere 6

("incomplete" || "unknown")将返回"incomplete"与之相比的数据status.