2013-03-11 97 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包括值的陣列,正則表達式測試等