在 JavaScript 中,??(双问号运算符)和 ?.(可选链运算符)区别

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

相关推荐
Ajiang282473530436 分钟前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
ggdpzhk36 分钟前
VUE:基于MVVN的前端js框架
前端·javascript·vue.js
幽兰的天空40 分钟前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
小曲曲2 小时前
接口上传视频和oss直传视频到阿里云组件
javascript·阿里云·音视频
学不会•3 小时前
css数据不固定情况下,循环加不同背景颜色
前端·javascript·html
EasyNTS4 小时前
H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连
javascript·h.265·h.264
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
活宝小娜5 小时前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点5 小时前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow5 小时前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js