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

如何将带赋值的空值合并运算符转换为常规三元运算符?

空值合并赋值运算符(??=)的含义及三元语法转换

先弄明白??=到底干啥的

你代码里的obj[array[i]] ??= {},其中??=是ES2021新增的空值合并赋值运算符,逻辑很直接:

  • 先判断obj[array[i]]是否为null或者undefined(划重点:0、空字符串、false这类假值不算在内)
  • 如果是,就把{}赋值给obj[array[i]],整个表达式返回这个新对象
  • 如果不是,直接返回obj[array[i]]原来的值,不会做任何修改

转成三元运算符的等价写法

要转成常规三元语法,得完全对应原逻辑,这里给出两种常用写法:

写法1:最直观的拆分版

// 先判断条件,满足时先给obj[array[i]]赋值,再把结果赋给obj
obj = (obj[array[i]] === null || obj[array[i]] === undefined) ? (obj[array[i]] = {}) : obj[array[i]];

写法2:更简洁的简化版

// 利用空值合并运算符的逻辑简化,和上面效果完全一致
obj = obj[array[i]] ?? (obj[array[i]] = {});

如果不需要把结果再赋值给obj,只处理obj[array[i]]的话,三元写法是:

obj[array[i]] = obj[array[i]] === null || obj[array[i]] === undefined ? {} : obj[array[i]];

别搞混类似运算符

顺带提一句,别把??=和||=搞混:

  • ||=是逻辑或赋值,只要左侧是假值(0、''、false、null、undefined全算)就会触发赋值
  • ??=只对null和undefined生效,其他假值不会触发赋值

内容的提问来源于stack exchange,提问作者Husky931

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:45:41