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