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

相关推荐
2401_873479404 小时前
如何利用IP查询定位识别电商刷单?4个关键指标+工具配置方案
开发语言·tcp/ip·php
我爱cope5 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
菜鸟学Python5 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
浪浪小洋6 小时前
c++ qt课设定制
开发语言·c++
charlie1145141916 小时前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
故事和你916 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
幺风7 小时前
Claude Code 源码分析 — Tool/MCP/Skill 可扩展工具系统
前端·javascript·ai编程
程序猿编码7 小时前
给你的网络流量穿件“隐形衣“:手把手教你用对称加密打造透明安全隧道
linux·开发语言·网络·安全·linux内核
ID_180079054737 小时前
淘宝 API 上货 / 商品搬家 业务场景实现 + JSON 返回示例
前端·javascript·json
M ? A7 小时前
Vue 动态组件在 React 中,VuReact 会如何实现?
前端·javascript·vue.js·经验分享·react.js·面试·vureact