JavaScript 空值合并怎么用

在日常写网页代码时,很多人都会遇到“变量可能没值,需要用默认值替代”的情况。比如做一个用户收货地址的输入框,用户没填省份的话,就自动显示“未填写”,这时候就需要给空变量设置替补值,而JavaScript里的空值合并,就是专门处理这种需求的实用方法。

先搞懂:哪些值会被“当成空”

很多新手刚开始会用||(逻辑或)来给变量设默认值,但它有个坑:不止null、undefined算“没值”,像0(数字零)、''(空字符串)、false这些其实是合法值,用||会误替换。比如想把销量为0的商品保留,销量 = 0 || 100会变成100,显然不对。

JavaScript 空值合并怎么用

而空值合并??只认真正的“空值”:只有null和undefined才会触发替补,其他哪怕是看起来“没用”的值,都会保留原来的内容。比如用户没填省份,province = userInput.province ?? '未填写',如果用户输入了空字符串'',province就会是'',不会变成默认值,刚好避开了||的坑。

生活化例子:外卖地址的小细节

举个大家都熟悉的外卖场景:假设我们要获取用户的“门牌号”,如果用户没填(undefined)或者删了内容(null),就显示“请补充门牌号”;但如果用户填了0号门(比如特殊的门牌号),就应该保留0。

用空值合并写的话,代码非常直白:

`javascript

// 模拟用户的地址数据,这里门牌号没填,是undefined

const userAddress = { doorNumber: undefined };

// 用??设置默认值,仅当doorNumber是null/undefined时生效

const finalDoor = userAddress.doorNumber ?? '请补充门牌号';

console.log(finalDoor); // 输出:请补充门牌号

`

如果用户填了0号门:

`javascript

const userAddress = { doorNumber: 0 };

const finalDoor = userAddress.doorNumber ?? '请补充门牌号';

console.log(finalDoor); // 输出:0,完全符合需求

`

要是用||的话,0会被当成空,结果就变成“请补充门牌号”,反而出错,这就是空值合并最实用的地方。

注意:不能和&&、||一起用,得加括号

很多人刚用的时候容易踩一个小坑:如果要把空值合并和其他逻辑运算符连在一起写,直接用会报错。比如想写a && b ?? c,浏览器会分不清优先级,直接提示语法错误。

这时候只要给??两边加括号就行,比如改成(a && b) ?? c,或者a ?? (b || c),就能正常运行。举个实际的例子:想先判断用户是不是VIP,再根据VIP等级给折扣,空值合并处理没等级的情况:

`javascript

const isVip = true;

const vipLevel = undefined; // 用户是VIP但没填等级

// 先判断是VIP,再用??补默认等级

const discount = isVip && vipLevel ?? 95; // 报错!

// 加括号修正后

const discount = (isVip && vipLevel) ?? 95;

console.log(discount); // 输出95,正确

`

什么时候用空值合并更合适

如果只是简单替换null/undefined,空值合并是首选,比写一堆if判断简洁太多;但如果确实要把0、空字符串这些当成“要替换的空”,那还是用||更合适。比如统计订单金额,没金额的时候用0,就可以写total = user.total || 0,不会出错。

简单总结:空值合并??就是专门给“真正没值”的变量设默认值的工具,避开了逻辑或的误判坑,代码写起来更省心,也减少了出错的可能。

上一篇 Java 如何读取 CSV