所以一個變量的值,在我的球隊初級程序員今天寫了下面的代碼:檢查使用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