在 JavaScript 中,??(雙問號運算符)和 ?.(可選鏈運算符)是兩種不同的運算符,用于處理不同的情況:
雙問號運算符 (??):
?? 運算符是空值合并運算符(Nullish Coalescing Operator)。
它的作用是為了提供一種默認值的設定,當左側的操作數為 null 或 undefined 時,使用右側的操作數作為默認值。
示例:
javascript
let value1 = null ?? ‘default’; // value1 等于 ‘default’
let value2 = undefined ?? ‘default’; // value2 等于 ‘default’
let value3 = ‘value’ ?? ‘default’; // value3 等于 ‘value’
在以上示例中,如果左側的值為 null 或 undefined,則 ?? 運算符會選擇右側的值作為結果。否則,它會選擇左側的值。
可選鏈運算符 (?.):
?. 運算符是可選鏈運算符(Optional Chaining Operator)。
它允許在訪問可能為空或未定義的對象屬性或方法時,不引發錯誤,而是返回 undefined。
示例:
javascript
let user = {
name: ‘Alice’,
social: {
twitter: ‘@alice’
}
};
let twitterHandle = user.social?.twitter; // twitterHandle 等于 ‘@alice’
let facebookHandle = user.social?.facebook; // facebookHandle 等于 undefined
在這個示例中,user.social?.twitter 如果 user.social 存在且具有 twitter 屬性,則返回 twitter 的值。如果 user.social 不存在或者沒有 twitter 屬性,則返回 undefined 而不是引發錯誤。
區別總結:
?? 運算符用于提供默認值,當左側的值為 null 或 undefined 時使用右側的默認值。
?. 運算符用于在鏈式訪問屬性或方法時,避免因為中間屬性不存在而導致的錯誤,而是安全地返回 undefined。