空值合并运算符的基本定义
JavaScript的空值合并运算符是ES2020引入的新特性,符号是??,也叫做双问号运算符。它的核心作用是给可能为null或者undefined的变量设置默认值,只有当左侧的值严格等于null或者undefined的时候,才会返回右侧的默认值,其他情况都会直接返回左侧的值。

空值合并运算符的判断逻辑
空值合并运算符的判断规则非常简单,只针对null和undefined两个特殊的空值做判断,和逻辑或运算符的判断逻辑有明显差异。我们可以通过下面的对比来明确两者的区别:
| 运算符 | 触发返回右侧值的条件 | 典型场景差异 |
|---|---|---|
| ||(逻辑或) | 左侧值为假值(false、0、空字符串、null、undefined、NaN等) | 会把0、空字符串等合法值当成无效值替换 |
| ??(空值合并) | 左侧值为null或者undefined | 仅替换真正的空值,保留0、空字符串等合法假值 |
基础使用示例
下面通过几个简单的代码示例来展示空值合并运算符的实际表现:
// 左侧为null的情况 let a = null; let resultA = a ?? '默认值'; console.log(resultA); // 输出:默认值 // 左侧为undefined的情况 let b = undefined; let resultB = b ?? '默认值'; console.log(resultB); // 输出:默认值 // 左侧为0的情况,0是合法数值,不会被替换 let c = 0; let resultC = c ?? 100; console.log(resultC); // 输出:0 // 左侧为空字符串的情况,空字符串是合法字符串,不会被替换 let d = ''; let resultD = d ?? '默认文本'; console.log(resultD); // 输出:(空字符串) // 左侧为false的情况,false是合法布尔值,不会被替换 let e = false; let resultE = e ?? true; console.log(resultE); // 输出:false
空值合并运算符的使用注意事项
不能直接和逻辑与或运算符混用
如果需要在同一个表达式里同时使用空值合并运算符和逻辑与(&&)、逻辑或(||)运算符,必须用括号明确优先级,否则JavaScript会直接抛出语法错误。
let num = 0; // 直接混用会报错 // let res = num || 10 ?? 20; // 正确写法,用括号明确优先级 let res = (num || 10) ?? 20; console.log(res); // 输出:10
和可选链运算符搭配使用
空值合并运算符经常和可选链运算符?.一起使用,用来处理对象深层属性可能为空的场景,避免访问不存在的属性时报错。
let user = {
name: '张三',
// 没有配置age属性
};
// 访问不存在的age属性,返回undefined,再用空值合并设置默认值
let age = user?.age ?? 18;
console.log(age); // 输出:18
// 如果对象本身可能为null
let user2 = null;
let name = user2?.name ?? '匿名用户';
console.log(name); // 输出:匿名用户
适用场景总结
空值合并运算符最适合用在需要给变量设置默认值,同时需要保留0、空字符串、false等合法假值的场景中。比如表单输入项的默认值处理、接口返回数据的兜底处理、函数参数的默认值设置等场景,都可以用空值合并运算符替代传统的逻辑或写法,避免不必要的默认值替换问题。
如果场景里需要把所有假值都替换成默认值,那还是应该使用逻辑或运算符。开发者需要根据实际的判断需求选择合适的运算符,才能让代码逻辑更符合预期。
JavaScript空值合并运算符双问号运算符逻辑处理默认值设置修改时间:2026-06-22 01:09:26