贝利信息

javascript空值合并运算符是什么_它与逻辑或有何不同?

日期:2026-01-01 00:00 / 作者:夜晨
应使用??而非||来保留0、false、''等合法falsy值;??仅在操作数为null/undefined时生效,优先级高于||但低于=,混用时须加括号,且不支持IE及旧Edge。

?? 是 JavaScript 的空值合并运算符,它只在左侧操作数为 nullundefined 时返回右侧操作数;而 || 在左侧为任意“falsy”值(如 0''false)时都会触发右侧逻辑。

什么时候该用 ?? 而不是 ||

当你想保留 0false'' 这类合法但 falsy 的默认值时,必须用 ??。比如配置项允许关闭功能(enabled: false),或允许设置数量为零(count: 0)。

?? 的结合性与括号必要性

?? 的优先级低于 =?:,但高于 && || —— 所以混用时极易出错,必须加括号明确意图。

浏览器兼容性与降级处理

现代浏览器(Chrome 80+、Firefox 74+、Safari 13.1+)原生支持 ??;IE 完全不支持,旧版 Edge(≤18)也不支持。

const settings = {
  theme: null,
  fontSize: 0,
  notifications: false
};

// ✅ 用 ??:保留 0 和 false
console.log(settings.fontSize ?? 16);        // 0
console.log(settings.notifications ?? true); // false

// ❌ 用 ||:意外覆盖合法值
console.log(settings.fontSize || 16);        // 16(错误!)
console.log(settings.notifications || true); // true(错误!)

真正容易被忽略的是结合性规则——哪怕你记住了 null/undefined 的语义,一不留神混用 ||&& 就会触发语法错误或逻辑翻车。