javascript中用||提供默认值会触发所有假值(false、0、''、null、undefined、nan),而??仅在null或undefined时生效;推荐优先使用??以实现更精确的默认值控制。

JavaScript 中用逻辑或(||)给变量提供默认值,本质是利用其“短路求值”特性:当左侧操作数为真值时,直接返回它;否则返回右侧操作数。但要注意,它对所有 假值(false、0、''、null、undefined、NaN)都会触发默认值,不只针对 undefined 或 null。
逻辑或(||)的基本行为
表达式 a || b 返回第一个真值,若都为假值则返回最后一个值:
-
10 || 20→10(10 是真值,直接返回) -
0 || 'default'→'default'(0 是假值,继续计算右边) -
null || 5→5 -
'' || 'fallback'→'fallback'
常用于设置默认参数或配置项
比如函数接收可选参数,想提供后备值:
function greet(name) {
name = name || 'Anonymous';
return `Hello, ${name}!`;
}
调用 greet('Alice') 返回 "Hello, Alice!";greet('') 却返回 "Hello, Anonymous!"——因为空字符串是假值。这未必符合预期。
更安全的替代方案:空值合并(??)
ES2020 引入的空值合并运算符 ?? 只在左侧为 null 或 undefined 时才取右边值,忽略 0、false、'' 等其他假值:
-
0 ?? 'default'→0 -
false ?? 'default'→false -
undefined ?? 'default'→'default' -
null ?? 'default'→'default'
推荐在需要区分“未定义”和“明确传入的假值”时使用 ??,例如:const timeout = options.timeout ?? 3000;
实际选择建议
用 || 还是 ??,取决于你希望默认逻辑覆盖哪些情况:
- 如果希望
0、false、空字符串等也触发默认值,就用|| - 如果只希望
null和undefined触发,默认保留其他假值,就用?? - 现代项目建议优先用
??,语义更清晰、行为更可控
不复杂但容易忽略细节。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











