You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中的??运算符是什么?如何使用?

空值合并运算符(??)详解

1. 基本定义

?? 是空值合并运算符,属于二进制运算符,核心作用是对两个操作数做空值判断:仅当左侧操作数为 null 或者 undefined 时,返回右侧操作数,否则直接返回左侧操作数。

2. 运行逻辑

运算过程遵循以下规则:

  • 先计算左侧表达式的返回值
  • 仅判断返回值是否属于「空值」,只有 null、undefined 两种情况会被判定为空
  • 若左侧为空,返回右侧表达式结果;若左侧不为空,直接返回左侧结果,右侧表达式不会被执行(短路效应)

3. 常用示例

// 基础取值场景
const userName = null ?? '匿名用户'
// 输出:匿名用户

const userAge = 0 ?? 18
// 输出:0(0不属于空值范畴,不会触发默认值返回)

// 短路效应验证
let count = 0
const result = 10 ?? ++count
// result输出为10,count仍为0,因为右侧运算逻辑被短路没有执行

4. 和逻辑或运算符(||)的核心差异

两者经常被混淆,本质区别是假值判定范围不同:

  • || 会将所有假值(0、空字符串''、false、NaN、null、undefined)都判定为需要返回右侧值
  • ?? 仅将null、undefined判定为需要返回右侧值
    对比示例:
const input = 0
const res1 = input || 100 // 返回100,因为0属于逻辑或判定的假值
const res2 = input ?? 100 // 返回0,因为0不属于空值合并运算符的判定空值

5. 使用注意事项

  • 不能直接和&&、||混合使用,必须加括号明确运算优先级,否则会抛出语法错误:
    // 错误写法
    null || undefined ?? 'test' 
    // 正确写法
    (null || undefined) ?? 'test'
    
  • 目前JavaScript、TypeScript、C#、PHP7.4+等主流语言都已支持该运算符,不同语言的核心运行逻辑基本一致。

内容的提问来源于stack exchange,提问作者Md Sakib Al Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:48:00