在JavaScript中使用if來做null檢查是很常見的,但是其中有幾個陷阱,空字符串和零都被強制轉化爲false,這往往會讓你犯錯。
if (typeof p !== "undefined" && p !== null) { p.func();}
CoffeeScript存在操作符?只會在變量爲null或者undefined的時候會返回真,與Ruby的nil?類似。到了CoffeeScript中,上面的代碼直接被簡化成:
p?.func()
意思就是變量p定義且被實例化過,則調用"func"方法,否則就不調用。
網絡上有說:存在操作符可以替換||操作符,這種觀點是不嚴格的,嚴格說是錯誤的
eg:
a = "123"
b = a || 30
alert b
說明:
當a的值不爲空時可以用?替換||,此時alert 爲123
如果a="",此時用?則alert爲空(空白) 用|| alert爲30
如果上面的變量a刪除 ?對應 alert爲30 用||編譯報錯
如果你在訪問屬性之前進行null
檢查,你可以把存在操作符放在它左邊來跳過檢查。這與Actice Support的try方法比較類似。
blackKnight.getLegs()?.kick()
你能夠用同樣的方法檢查一個屬性是否是函數,是否可以調用,把存在操作符放在括號之前就行。如果屬性不存在,或者不是一個函數,則就不會被調用。
blackKnight.getLegs().kick?()