JavaScript中的??运算符是什么?如何使用?
空值合并运算符(
??)详解 1. 基本定义
?? 是空值合并运算符,属于二进制运算符,核心作用是对两个操作数做空值判断:仅当左侧操作数为 null 或者 undefined 时,返回右侧操作数,否则直接返回左侧操作数。
2. 运行逻辑
运算过程遵循以下规则:
- 先计算左侧表达式的返回值
- 仅判断返回值是否属于「空值」,只有
null、undefined两种情况会被判定为空 - 若左侧为空,返回右侧表达式结果;若左侧不为空,直接返回左侧结果,右侧表达式不会被执行(短路效应)
3. 常用示例
// 基础取值场景 const userName = null ?? '匿名用户' // 输出:匿名用户 const userAge = 0 ?? 18 // 输出:0(0不属于空值范畴,不会触发默认值返回) // 短路效应验证 let count = 0 const result = 10 ?? ++count // result输出为10,count仍为0,因为右侧运算逻辑被短路没有执行
4. 和逻辑或运算符(||)的核心差异
两者经常被混淆,本质区别是假值判定范围不同:
||会将所有假值(0、空字符串''、false、NaN、null、undefined)都判定为需要返回右侧值??仅将null、undefined判定为需要返回右侧值
对比示例:
const input = 0 const res1 = input || 100 // 返回100,因为0属于逻辑或判定的假值 const res2 = input ?? 100 // 返回0,因为0不属于空值合并运算符的判定空值
5. 使用注意事项
- 不能直接和
&&、||混合使用,必须加括号明确运算优先级,否则会抛出语法错误:// 错误写法 null || undefined ?? 'test' // 正确写法 (null || undefined) ?? 'test' - 目前JavaScript、TypeScript、C#、PHP7.4+等主流语言都已支持该运算符,不同语言的核心运行逻辑基本一致。
内容的提问来源于stack exchange,提问作者Md Sakib Al Islam
相关产品推荐
相关产品推荐

