JavaScript中的空值合并运算符是ES2020引入的新特性,主要用于给可能为null或undefined的变量设置默认值,在逻辑处理场景中非常实用,能有效避免传统默认值设置方式的潜在问题。

空值合并运算符基本语法
空值合并运算符的写法是??,它的作用是当左侧的操作数为null或者undefined时,返回右侧的操作数,否则返回左侧的操作数。和其他逻辑运算符一样,它也具有短路特性,如果左侧操作数不是null或undefined,右侧的表达式不会被计算。
基础使用示例代码如下:
// 左侧为undefined,返回右侧默认值
const val1 = undefined ?? '默认值';
console.log(val1); // 输出:默认值
// 左侧为null,返回右侧默认值
const val2 = null ?? '默认值';
console.log(val2); // 输出:默认值
// 左侧为0,返回左侧值
const val3 = 0 ?? '默认值';
console.log(val3); // 输出:0
// 左侧为空字符串,返回左侧值
const val4 = '' ?? '默认值';
console.log(val4); // 输出:空字符串
// 短路特性示例,右侧函数不会执行
function getDefault() {
console.log('执行了默认函数');
return '默认值';
}
const val5 = '已有值' ?? getDefault();
console.log(val5); // 输出:已有值,不会打印执行了默认函数
和逻辑或运算符的区别
很多开发者会习惯用逻辑或运算符||来设置默认值,但是两者在处理 falsy 值的时候表现不同。逻辑或运算符会在左侧操作数为任意 falsy 值(包括0、空字符串、false等)时返回右侧的默认值,而空值合并运算符只会在左侧是null或undefined时返回右侧默认值。
两者的差异对比如下:
| 左侧操作数 | 逻辑或运算符返回结果 | 空值合并运算符返回结果 |
|---|---|---|
| undefined | 右侧默认值 | 右侧默认值 |
| null | 右侧默认值 | 右侧默认值 |
| 0 | 右侧默认值 | 0 |
| '' | 右侧默认值 | '' |
| false | 右侧默认值 | false |
| NaN | 右侧默认值 | NaN |
通过代码示例可以更直观看到区别:
// 逻辑或运算符的默认设置问题 const count1 = 0 || 10; console.log(count1); // 输出:10,不符合预期,我们可能希望保留0 const count2 = 0 ?? 10; console.log(count2); // 输出:0,符合预期 const name1 = '' || '默认名称'; console.log(name1); // 输出:默认名称,不符合预期,可能希望保留空字符串 const name2 = '' ?? '默认名称'; console.log(name2); // 输出:空字符串,符合预期
使用注意事项
在使用空值合并运算符时,有一个重要的限制:不能和逻辑与&&、逻辑或||运算符直接混合使用,否则会抛出语法错误,因为JavaScript无法确定运算优先级。
错误使用示例:
// 直接混合使用会报错 const result = null || undefined ?? '默认值'; // SyntaxError
如果需要混合使用,必须添加括号明确优先级:
// 添加括号明确优先级 const result = (null || undefined) ?? '默认值'; console.log(result); // 输出:默认值 const result2 = null || (undefined ?? '默认值'); console.log(result2); // 输出:默认值
适用场景总结
当我们需要设置的默认值仅在变量为null或undefined时生效,而需要保留0、空字符串、false等合法 falsy 值时,优先使用空值合并运算符。如果默认值需要在变量为任意 falsy 值时都生效,则可以使用逻辑或运算符。根据实际的业务逻辑选择合适的运算符,能减少很多不必要的bug。
JavaScript空值合并运算符逻辑或运算符nullish_coalescing修改时间:2026-06-09 21:30:23