空字符串在??中为有效值,在||中为假值;??仅对null/undefined取默认值,||对所有假值('',0,false,null,undefined,nan)取默认值;选哪个取决于空字符串是否代表有效状态。

空字符串在 ?? 中被当作有效值
?? 只关心左侧是否为 null 或 undefined。空字符串 '' 既不是 null 也不是 undefined,所以它会被原样保留,不会触发右侧的默认值。
-
'' ?? 'fallback'→ 返回'' -
undefined ?? 'fallback'→ 返回'fallback' -
null ?? 'fallback'→ 返回'fallback'
空字符串在 || 中被当作假值跳过
|| 会对左侧操作数执行**隐式布尔转换**。空字符串属于 JavaScript 的六大假值(false、0、''、null、undefined、NaN),因此只要左边是 '',就会直接返回右边的值。
-
'' || 'fallback'→ 返回'fallback' -
0 || 'fallback'→ 返回'fallback' -
false || 'fallback'→ 返回'fallback'
选哪个,取决于你对空字符串的语义判断
如果空字符串是你业务中一个合法、有意义的状态(比如用户主动清空了搜索框、表示“不筛选”),就该用 ??;如果空字符串和 null/undefined 一样,都代表“未提供”或“无效输入”,那 || 更合适。
- 表单字段允许为空字符串?→
value ?? ''安全保留原始值 - 用户名不能为空,空串等同于没填?→
username || 'Anonymous' - API 返回的 name 字段可能为 '',但你不希望它被默认值覆盖?→ 用 ??
一个小验证技巧
可以快速测试某个值在两种运算符下的行为:
console.log(['', 0, false, null, undefined].map(v => [v ?? 'N', v || 'O']))- 输出会清晰显示:只有
null和undefined在两者下结果一致;其余假值在 ?? 下保留原值,在 || 下都被替换
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











