CoffeeScript 存在操作符“?” 詳解

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章