JavaScript - 可選鏈(Optional Chaining)
在取得 API 響應並存取數據時,時常會遇到 TypeError: Cannot read property 'xxx' of null
或是 TypeError: Cannot read property 'xxx' of undefined
的錯誤,而造成錯誤的原因就是試圖從 nullish value 上讀取屬性或調用方法,為了解決這個問題,可以在取值時使用可選鏈,以免程式拋出錯誤。
可選鏈(Optional Chaining)
用來避免在從 nullish value(null
或 undefined
)上讀取屬性或調用方法時拋出錯誤,語法為 ?.
。
使用範例 :
1 | const pets = { |
當存取物件中不存在的屬性時,若沒有使用可選鏈就會報錯,而使用可選鏈則會回傳 undefined
。
在可選鏈出現之前,為了避免錯誤,通常會這麼做 :
1 | const pets = { |
這樣的寫法雖然可以避免錯誤,但是若需要存取巢狀物件的深層屬性時,那就必須要更多的判斷才能確保程式不報錯,所以為了簡潔與可讀性,使用可選鏈 ?.
是更好的選擇。
調用方法 :
1 | const aben = { |
上面程式碼中呼叫 aben
物件中不存在的 fly
方法,但因為使用可選鏈,所以回傳 undefined
而不會報錯,並且搭配空值合併運算符(Nullish Coalescing Operator) ??
,以回傳除了 undefined
與 null
的其他值。
存取陣列數據 :
1 | const pets = [ |