空合并 ?? 和 或 || 的核心区别

这两个都是取值 / 兜底运算符,但判断规则完全不同,这是最关键的区别:
运算符 判断规则 适用场景
(逻辑或) 判定所有假值: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 ?? '默认值'); // 输出:默认值 ✅
  1. ||(逻辑或)
    规则:左边是假值,就返回右边的默认值
    假值清单:0、''(空字符串)、false、null、undefined、NaN
    坑点:业务中0、空字符串、false 往往是有效值,会被错误替换
  2. ??(空合并运算符 ES2020)
    规则:左边仅为 null /undefined 时,才返回右边默认值
    优点:不影响 0、''、false 这些正常有效值
    用途:专门处理 “变量没定义 / 为空” 的场景
posted @ 2026-04-04 23:24  jialiangzai  阅读(7)  评论(0)    收藏  举报