在 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。