空合并 ?? 和 或 || 的核心区别
这两个都是取值 / 兜底运算符,但判断规则完全不同,这是最关键的区别:
运算符 判断规则 适用场景
(逻辑或) 判定所有假值:false/0/''/null/undefined/NaN 只要是 “空 / 假” 就兜底
?? (空合并) 只判定空值:null / undefined 只在真正空的时候兜底
// 测试值
const test1 = 0;
const test2 = '';
const test3 = false;
const test4 = null;
const test5 = undefined;
// 1. || 逻辑或:会把 0、空字符串、false 都当成“无效值”
console.log(test1 || '默认值'); // 输出:默认值 ❌ 0 被替换了
console.log(test2 || '默认值'); // 输出:默认值 ❌ 空字符串被替换了
console.log(test3 || '默认值'); // 输出:默认值 ❌ false 被替换了
console.log(test4 || '默认值'); // 输出:默认值 ✅
console.log(test5 || '默认值'); // 输出:默认值 ✅
// 2. ?? 空合并:只处理 null/undefined,保留 0、''、false
console.log(test1 ?? '默认值'); // 输出:0 ✅ 正常保留
console.log(test2 ?? '默认值'); // 输出:'' ✅ 正常保留
console.log(test3 ?? '默认值'); // 输出:false ✅ 正常保留
console.log(test4 ?? '默认值'); // 输出:默认值 ✅
console.log(test5 ?? '默认值'); // 输出:默认值 ✅
- ||(逻辑或)
规则:左边是假值,就返回右边的默认值
假值清单:0、''(空字符串)、false、null、undefined、NaN
坑点:业务中0、空字符串、false 往往是有效值,会被错误替换 - ??(空合并运算符 ES2020)
规则:左边仅为 null /undefined 时,才返回右边默认值
优点:不影响 0、''、false 这些正常有效值
用途:专门处理 “变量没定义 / 为空” 的场景
本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/p/19822015

浙公网安备 33010602011771号