2013-05-08 198 views
6

我通常設置對象的屬性,像這樣,如何輕鬆地將默認值爲true的變量設置爲false?

// Boolean 
this.listening = config.listening || true; 

config.listening是真或假,在這種情況下this.listening將永遠是正確的,因爲如果config.listening是假的就等於真。

有沒有更好的方法來設置這些布爾屬性,而不必做一個if語句?

在javascript中是否有if isset函數來檢查它是否存在,而不是它等於什麼?

回答

12

你可以使用三元(條件)操作是這樣的:

this.listening = config.listening === false ? false : true; 

如果config.listeningfalsethis.listening設置爲false。如果是其他值,則設置爲true

如果你想檢查它的定義,你可以使用:

this.listening = typeof config.listening !== "undefined" 

參考文獻:

+1

謝謝你,工作完美 – user2251919 2013-05-08 13:40:09

+0

公頃。 Webstorm將你的答案簡化爲:config.listening!== false,似乎是正確的。 – 2015-11-03 00:39:32

+1

@AlexMills你絕對是對的!凝聚是絕對有可能的,我只是試圖在寫這個時明確/描述性的(我猜) – Ian 2015-11-04 19:18:54

3

你需要檢查,以確保它是不是沒有定義,也不是它是「虛假」的價值。

this.listening = config.listening!==undefined ? config.listening : true; 
+0

...或在配置中'聽'可能 – Pointy 2013-05-08 13:38:54

+1

更好的做'typeof config.listening!==「undefined」'或者這只是一個可讀性因子 – user2251919 2013-05-08 13:43:34

+0

是的,它會更好。 (或者在配置中「聆聽」)。看到這個問題的關於這個問題的討論:http://stackoverflow.com/questions/519145/how-can-i-check-whether-a-variable-is-defined-in-javascript – 2013-05-08 13:45:17

-1

最快的方法就是這樣。

d = true; 

d返回true。

然後只要使用!運算符將布爾值從true切換到false。

d = !d; 

d返回false。

然後再一次。

d = !d; 

d返回true。

+1

要更準確地向OP解釋您的答案,您可以添加此信息。 'this.listening = !! config.listening'。 兩個NOT保留了實際的布爾值,但是將null或undefined作爲false。但是,再次,這不是OP正在尋找。即使「config.listening」爲「未定義」,該人正在將默認值查找爲「true」 – Lokesh 2017-05-25 07:56:43

相關問題