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

为什么JavaScript中的空值合并运算符(??)在此场景下不生效?

为什么JavaScript中的空值合并运算符(??)在此场景下不生效?

嘿,你这个问题其实是把「变量未被声明」和「变量的值为undefined」这两个概念搞混啦!我来给你讲明白~

你写的代码let a = b ?? 0;之所以抛出Uncaught ReferenceError: b is not defined,核心原因是:JavaScript根本找不到b这个变量——你从来没用var、let或者const声明过它,JS引擎在执行这段代码时,连获取b的值的机会都没有,直接就报错了。

你看到的文档里说的「空值合并运算符会在左操作数是null或undefined时返回右操作数」,这里的undefined指的是已经被声明的变量的值为undefined,而不是变量本身压根不存在。

举两个对比例子你就懂了:

  • 错误场景(和你的代码一样):
let a = b ?? 0; // 直接报错:b未被定义
  • 正确场景(变量已声明,值为undefined):
let b; // 声明了b,但没赋值,默认值是undefined
let a = b ?? 0; // 此时a的值为0,符合你的预期

再比如函数参数的场景,参数即使没传值,也是被声明过的变量:

function getDefaultValue(b) {
  return b ?? 0;
}
getDefaultValue(); // 返回0,因为b是已声明的变量,值为undefined

简单总结一下:空值合并运算符??的作用是处理已存在变量的null/undefined值,如果变量本身从未被声明,JS会直接抛出引用错误,轮不到??来处理哦。

备注:内容来源于stack exchange,提问作者You Old Fool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:24:33