這兩者有什麼區別?從紅寶石,我習慣於apple ||= walrus
設置蘋果等於海象只有當蘋果爲空。這在JS/CS中似乎是一樣的,儘管?=似乎也是一樣。是什麼讓我困惑的是:CoffeeScript中的「|| =」運算符與「?=」有什麼不同?
apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9
笏
這兩者有什麼區別?從紅寶石,我習慣於apple ||= walrus
設置蘋果等於海象只有當蘋果爲空。這在JS/CS中似乎是一樣的,儘管?=似乎也是一樣。是什麼讓我困惑的是:CoffeeScript中的「|| =」運算符與「?=」有什麼不同?
apple = 0
walrus = 9
apple ?= walrus // outputs 0
apple ||= walrus // outputs 9
笏
要做的最好的事情就是看看生成的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 ||= walrus
與apple = apple || walrus
意思相同,所以任何真正的蘋果值都會使邏輯短路並且不會改變apple的值。
?=
是存在運營商。它會根據null
和undefined
進行檢查。
||=
只是檢查變量的值爲「非假」,如果我記得沒錯的話...那麼意思是0
是假的。
最後一行讓我明白了。謝謝。 – Chris
@Chris酷,很高興幫助。 – loganfsmyth
(對於臨時閱讀器:'undefined == null'在JavaScript中是true,'undefined'和'null',兩個false-y值是'x'的* only *值,這會導致'x == null ) – 2012-05-05 19:05:46