?? 运算符仅在左侧为 null 或 undefined 时使用默认值,故 "" ?? "default" 返回 "";|| 将所有 falsy 值(含 ""、0、false 等)视为无效,故 "" || "default" 返回 "default";语义上空字符串合法时用 ??,否则用 ||。

空字符串("")在 JavaScript 中属于“假值”(falsy),但它**既不是 null,也不是 undefined**。正因如此,?? 和 || 在处理空字符串时行为完全不同。
?? 对空字符串不做干预,原样保留
空值合并运算符只在左侧为 null 或 undefined 时才启用右侧默认值。空字符串不符合这个条件,所以它会被当作有效值直接返回。
-
"" ?? "default"→ 结果是"" -
data.name ?? "Anonymous",若data.name === "",结果仍是空字符串,不会 fallback
|| 把空字符串当“无效”,立即切换到默认值
逻辑或运算符会把所有 falsy 值(包括 ""、0、false、null、undefined、NaN)都视为“需要替换”的情况,只要左边是空字符串,就取右边。
-
"" || "default"→ 结果是"default" -
input.value || "请输入内容",即使用户输入了空格以外的空字符串,也会显示提示
实际选择建议
看业务语义是否允许空字符串作为合法值:
立即学习“Java免费学习笔记(深入)”;
- 如果空字符串有意义(比如一个可清空的搜索框、允许留空的备注字段),用
?? - 如果空字符串代表“未填写”“不可接受”,应统一按无效处理,用
|| - 不确定时,优先用
??更安全——它不会意外覆盖 0、false 等合理值


















