14

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

if(status === ("incomplete" || "unknown"))

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

if(status === "incomplete" || status === "unknown"))

但我无法解释的是为什么第一段代码不起作用!或者为什么如果“状态”设置为“不完整”则它评估为真,但当它设置为“未知”时它评估为假......

4

3 回答 3

21

在 JavaScript 中,如果||运算结果为true(即不是falsenullundefined""0),则运算符返回其第一个操作数,否则返回其第二个操作数。

在第一种情况下,("incomplete" || "unknown")总是评估为"incomplete",因为它评估为真。

整个条件就变成了:

if (status === "incomplete")

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

于 2013-03-11T16:23:10.663 回答
6

("incomplete" || "unknown")将返回"incomplete"比比较的status

于 2013-03-11T16:23:17.813 回答
3

但我无法解释的是为什么完全status === ("incomplete" || "unknown")行不通

这是因为括号中的表达式首先被求值。非空字符串incomplete是真实的,所以OR 表达式 ("incomplete" || "unknown")产生"incomplete"并且只有它与您的status变量进行比较。

为了缩短条件,有很多方法,包括值数组、正则表达式测试等。

于 2013-03-11T16:23:52.053 回答