逻辑空运算符??仅在操作数为null或undefined时取右侧默认值,精准避免误替换0、false、''等falsy值;其优先级低于||和&&,需括号明确顺序;es2020特性,现代环境原生支持。

JavaScript 中用逻辑空运算符(??)设置默认值,只在左侧操作数为 null 或 undefined 时才取右侧值,不会误把 0、false、''(空字符串)等“falsy 值”当成无效而替换。
空运算符 ?? 和 || 的关键区别
很多人误用 || 设默认值,但它会把所有 falsy 值都覆盖:
-
0 || 10→10(但 0 是合法数值,不该被替换) -
'' || 'default'→'default'(但空字符串可能是有效输入) -
null || 5→5✅(符合预期) -
undefined || 5→5✅(符合预期)
而 ?? 更精准:
-
0 ?? 10→0(保留 0) -
'' ?? 'default'→''(保留空字符串) -
null ?? 5→5 -
undefined ?? 5→5
常见默认值场景写法
适用于函数参数、对象解构、配置合并等需要“仅对真正缺失值兜底”的情况:
-
函数参数默认值:
function greet(name) { console.log(`Hello, ${name ?? 'Guest'}`); } -
对象属性安全读取:
const timeout = config.timeout ?? 5000;(即使config.timeout === 0也保留) -
链式访问 + 默认值:
user.profile?.theme ?? 'light'(先可选链,再空判断) -
与解构结合:
const { id, name = 'Anonymous' } = user;是解构默认值(针对undefined),而const name = user.name ?? 'Anonymous';更显式、更可控
注意优先级和嵌套使用
?? 优先级低于 || 和 &&,混用时必须加括号,否则会报错:
- ❌ 错误:
a ?? b || c→ 语法错误(不能直接混用) - ✅ 正确:
(a ?? b) || c(先空判断,再或运算) - ✅ 正确:
a ?? (b || c)(先或运算,结果再空判断) - ✅ 多重空判断:
a ?? b ?? c ?? 'default'(从左到右,第一个非 null/undefined 的值)
兼容性提醒
?? 是 ES2020 特性,现代浏览器和 Node.js 14+ 原生支持。如需兼容旧环境(如 IE 或低版本 Node),可用 Babel 转译,或回退为三元表达式:val !== null && val !== undefined ? val : defaultValue,但更推荐用工具链自动处理。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











