微軟TypeScript程序經理 Daniel Rosenwasser 宣布Optional Chaning(?.)進入TC39 Stage 4狀態,這意味著該特性現在已經是ES2020標準的一部分。
Optional Chaining最初是TypeScript的issue跟蹤器上第16個issue,于5年前提交,要知道目前總共有多達23000個issue。當時TC39還沒有正式提案,這些年來開發者一直要求實現該特性,但是為了不與ECMAScript建議沖突,遲遲沒有實現,相反TS開發團隊一直在幫助推動該提案實現標準化,并最終推及所有JavaScript與TypeScript開發者。
TypeScript就在上個月發布的 3.7版本中,正式帶來了Optional Chaining特性,現在則更進一步,該特性進入了ECMAScript標準。
Optional Chaining特性主要用于保護出現在屬性路徑中null和undefined值,像C#等語言中已經有用于訪問屬性鏈的語法糖,可以在對象層次結構中的任何地方處理遇到的null和undefined情況,使它可以正常執行,而不會拋出錯誤。
具體來講,在向樹狀結構深處進行屬性值訪問時,通常需要檢查中間節點是否存在:
var street = user.address && user.address.street;
許多API返回一個對象或null/undefined,并且可能只想在結果不為null時從結果中提取屬性:
var fooInput = myForm.querySelector('input[name=foo]') var fooValue = fooInput ? fooInput.value : undefined
Optional Chaining運算符允許開發人員直接用簡單的方式處理這種情況,而不用進行重復性操作,或者使用臨時變量分配中間結果:
var street = user.address?.street var fooValue = myForm.querySelector('input[name=foo]')?.value
因為是保護訪問屬性鏈時的null與undefined,所以Optional Chaining運算符也叫做“安全導航運算符”,TC39標準中給出的該運算符是“?.”,它的語法可以適用于三種場景:
obj?.prop // 自判斷靜態屬性訪問 obj?.[expr] // 自判斷動態訪問 func?.(...args) // 自判斷函數或方法調用
對于開發者來說,再也不用看到滿屏`x && x.yyy`了。