es6 Null 傳導運算符


Null 傳導運算符

程實務中,如果讀取對象內部的某個屬性,往往需要判斷一下該對象是否存在。比如,要讀取message.body.user.firstName,安全的寫法是寫成下面這樣。

const firstName = (message

&& message.body

&& message.body.user

&& message.body.user.firstName) || 'default';

這樣的層層判斷非常麻煩,因此現在有一個提案,引入了“Null 傳導運算符”(null propagation operator)?.,簡化上面的寫法。

const firstName = message?.body?.user?.firstName || 'default';

上面代碼有三個?.運算符,只要其中一個返回nullundefined,就不再往下運算,而是返回undefined

“Null 傳導運算符”有四種用法。

  • obj?.prop// 讀取對象屬性
  • obj?.[expr]// 同上
  • func?.(...args)// 函數或對象方法的調用
  • new C?.(...args)// 構造函數的調用

傳導運算符之所以寫成obj?.prop,而不是obj?prop,是為了方便編譯器能夠區分三元運算符?:(比如obj?prop:123)。

下面是更多的例子。

  // 如果 a 是 null 或 undefined, 返回 undefined
  // 否則返回 a.b.c().d
  a?.b.c().d
  ``
 // 如果 a 是 null 或 undefined,下面的語句不產生任何效果
  // 否則執行 a.b = 42
  a?.b = 42
 ``
 // 如果 a 是 null 或 undefined,下面的語句不產生任何效果
 delete a?.b


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM