在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?()