所以一个变量的值,在我的球队初级程序员今天写了下面的代码:检查使用OR操作
if(status === ("incomplete" || "unknown"))
这显然是不打算做什么,他打算,这是这样的:
if(status === "incomplete" || status === "unknown"))
但我无法解释的是为什么第一个代码片段不起作用!为什么它的计算结果为真,如果“状态”设置为“不完整的”,但为假,当它被设置为“未知” ......
所以一个变量的值,在我的球队初级程序员今天写了下面的代码:检查使用OR操作
if(status === ("incomplete" || "unknown"))
这显然是不打算做什么,他打算,这是这样的:
if(status === "incomplete" || status === "unknown"))
但我无法解释的是为什么第一个代码片段不起作用!为什么它的计算结果为真,如果“状态”设置为“不完整的”,但为假,当它被设置为“未知” ......
在JavaScript中,如果计算结果为true
的||
操作者返回其第一个操作数(即它不是false
,null
,undefined
,""
或0
),否则它不是第二操作数。
在第一种情况下,("incomplete" || "unknown")
总是计算为"incomplete"
,因为它的计算结果为真。
整个状态就变成了:
if (status === "incomplete")
,说明您所观察的行为。
("incomplete" || "unknown")
将返回"incomplete"
这比与status
相比。
但我无法解释是到底为什么
status === ("incomplete" || "unknown")
是行不通的
这是因为在括号中的表达式先求值。非空字符串incomplete
是truthy,所以OR-expression("incomplete" || "unknown")
产生"incomplete"
,然后只有那个与您的status
变量进行比较。
为了缩短条件,there are many ways包括值的阵列,正则表达式测试等
1 - 你9秒快速与完全形成的答案。哇。 – insertusernamehere 2013-03-11 16:26:06
“...返回它的第一个操作数,如果它的计算结果为”真“......”我会改变它说“如果它真的返回它的第一个操作数”,你的括号中基本解释了这一点,但“truthy”和“falsey “是最常用来表达这个概念的词语。 – zzzzBov 2013-03-11 16:47:32
我通常会用“truthy”和“falsey”这两个字,尽管我发现他们通常会混淆新手。但是,是的,这正是我的意思。 – 2013-03-11 22:34:26