微軟 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`了。
[admin
]