2013-03-11 96 views
13

所以一个变量的值,在我的球队初级程序员今天写了下面的代码:检查使用OR操作

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

这显然是不打算做什么,他打算,这是这样的:

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

但我无法解释的是为什么第一个代码片段不起作用!为什么它的计算结果为真,如果“状态”设置为“不完整的”,但为假,当它被设置为“未知” ......

回答

20

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

在第一种情况下,("incomplete" || "unknown")总是计算为"incomplete",因为它的计算结果为真。

整个状态就变成了:

if (status === "incomplete") 

,说明您所观察的行为。

+0

1 - 你9秒快速与完全形成的答案。哇。 – insertusernamehere 2013-03-11 16:26:06

+2

“...返回它的第一个操作数,如果它的计算结果为”真“......”我会改变它说“如果它真的返回它的第一个操作数”,你的括号中基本解释了这一点,但“truthy”和“falsey “是最常用来表达这个概念的词语。 – zzzzBov 2013-03-11 16:47:32

+0

我通常会用“truthy”和“falsey”这两个字,尽管我发现他们通常会混淆新手。但是,是的,这正是我的意思。 – 2013-03-11 22:34:26

6

("incomplete" || "unknown")将返回"incomplete"这比与status相比。

3

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

这是因为在括号中的表达式先求值。非空字符串incomplete是truthy,所以OR-expression("incomplete" || "unknown")产生"incomplete",然后只有那个与您的status变量进行比较。

为了缩短条件,there are many ways包括值的阵列,正则表达式测试等