2012-05-05 62 views
12

這兩者有什麼區別?從紅寶石,我習慣於apple ||= walrus設置蘋果等於海象只有當蘋果爲空。這在JS/CS中似乎是一樣的,儘管?=似乎也是一樣。是什麼讓我困惑的是:CoffeeScript中的「|| =」運算符與「?=」有什麼不同?

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

回答

18

要做的最好的事情就是看看生成的JS。

的CoffeeScript:

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

的JavaScript:

var apple, walrus; 
apple = 0; 
walrus = 9; 
if (apple == null) apple = walrus; 
apple || (apple = walrus); 

正如你所看到的,?=明確檢查的東西是null或JS undefined。這與||=完全不同,它只是依賴於apple是否是一個虛假價值。

若要擴展更多apple ||= walrusapple = apple || walrus意思相同,所以任何真正的蘋果值都會使邏輯短路並且不會改變apple的值。

+0

最後一行讓我明白了。謝謝。 – Chris

+0

@Chris酷,很高興幫助。 – loganfsmyth

+2

(對於臨時閱讀器:'undefined == null'在JavaScript中是true,'undefined'和'null',兩個false-y值是'x'的* only *值,這會導致'x == null ) – 2012-05-05 19:05:46

3

?=存在運營商。它會根據nullundefined進行檢查。

||=只是檢查變量的值爲「非假」,如果我記得沒錯的話...那麼意思是0是假的。

相關問題