JavaScript中逻辑或(||)利用短路求值设默认值,返回首个真值;但会误判0、false等falsy合法值,此时应改用空值合并运算符??和可选链操作符。

JavaScript 中用逻辑或运算符(||)设置备用选项,本质是利用其“短路求值”特性:当左侧操作数为真值(truthy)时,直接返回它;否则返回右侧操作数。这常用于提供默认值。
基础用法:为变量提供默认值
最常见场景是给可能为 null、undefined 或空字符串的变量设 fallback:
-
const name = userInput || '匿名用户';—— 若userInput是''、null、undefined、0、false、NaN,就用'匿名用户' -
const config = userConfig || {};—— 确保config至少是个空对象,避免后续访问属性时报错
注意:它判断的是“真值”,不是“是否为 null/undefined”
|| 会把所有 falsy 值(false、0、-0、0n、''、null、undefined、NaN)都当作“需要替换”的情况。这意味着:
- 如果允许
0或false作为合法值,用||会误覆盖 —— 比如const count = items.length || 10;,当items为空数组时,length是0,结果得到10,而非预期的0 - 此时应改用空值合并运算符
??(ES2020+):const count = items.length ?? 10;,它只在左侧为null或undefined时才取右边
链式使用与函数调用结合
可以多层回退,或配合函数获取更灵活的默认值:
立即学习“Java免费学习笔记(深入)”;
const theme = userTheme || savedTheme || 'light';-
const apiHost = config.host || getEnvFallback() || 'https://api.example.com';—— 只有前面都 falsy 才执行函数
替代写法:可选链 + 空值合并(现代推荐)
对嵌套对象取值并设默认值,传统写法易出错:
- ❌
const city = user.address.city || '未知城市';—— 若user.address是undefined,会报错 - ✅
const city = user?.address?.city ?? '未知城市';—— 安全取值 + 精准 fallback
逻辑或适合简单、明确的真值判断场景;需要区分 0、false 等合法值时,请优先用 ?? 和可选链。


















