??仅在左侧为null或undefined时返回右侧值,保留0、''、false等合法假值;||在左侧为任意falsy值(含''、0、false、null、undefined、nan)时均返回右侧值。

空字符串 "" 在 ?? 和 || 中的处理方式完全不同:它会被 || 当作“假值”而触发默认值,但不会被 ?? 视为“空”,因此原值照常保留。
?? 不会把空字符串当空值
?? 只对 null 和 undefined 做响应。空字符串是合法的字符串类型值,既不是 null 也不是 undefined,所以它会被原样返回。
-
"" ?? "default"→ 结果是"" -
data.name ?? "anonymous",如果data.name === "",结果仍是空字符串
|| 会把空字符串当假值处理
|| 的判断基于 JavaScript 的“falsy 值”规则,空字符串明确属于 falsy 值(和 false、0、null 等同级),只要左边是 "",就会跳过并返回右侧值。
-
"" || "default"→ 结果是"default" -
form.inputValue || "请输入内容",即使用户提交了空字符串,也会显示提示语
实际场景中的影响
选错运算符容易导致逻辑意外。比如表单字段允许为空字符串(表示“用户明确留空”),但你用了 ||,就可能覆盖这个有效意图。
- ✅ 用
??:保留0、false、""等合法业务值 - ❌ 用
||:把""、0、false全当成“无效”,统一兜底 - 典型误用:
settings.theme || "light"—— 若theme被设为"",本意可能是禁用主题,结果却回退到 light











