1. 程式人生 > 實用技巧 >ES2020可選鏈"?."

ES2020可選鏈"?."

一、可選鏈是什麼

可選鏈?.是一種訪問巢狀物件屬性的防錯誤方法。即使中間的屬性不存在,也不會出現錯誤。

二、為什麼要使用可選鏈

在很多情況下,我們需要取一個物件的子(孫)屬性,但有時會出現下面這種特例:

const a = {};
console.log(a.b.c); // Error!

a.b的值是undefined,所以再取c的值會報錯。之前,沒有可選鏈的時候,我們是怎麼防止這種errror呢?

console.log(a && a.b && a.b.c);

依次對整條路徑上的屬性使用 && 運算進行判斷,以確保所有節點是存在的,但是寫起來很麻煩。這時,如果使用可選鏈,寫法就會簡單一些。

console.log(a?.b?.c);

1. 可選鏈?.前面部分如果是undefined或者null,它會停止運算並返回undefined

注意: ?.語法使其前面的值成為可選值,但不會對其後面的起作用。例如:

const a = {};
console.log(a?.b?.c); // undefined  (b是undefined)
const d = null;
console.log(d.b?.c);  // Error

2. ?.前的變數必須已宣告。

如果未宣告變數tomorrow,那麼tomorrow?.date會觸發一個錯誤:

// ReferenceError: tomorrow is not defined
tomorrow.date

so, ?.前面的變數必須要通過 var/const/let 進行宣告。

三、短路效應

正如上文所說