JavaScript能否用单行代码实现空值合并赋值后设置对象属性?
单行实现空值检查并赋值子属性
当然可以,有几种简洁的单行写法能实现和你原有代码完全一致的效果,而且会保留a.b原有的数据:
最贴合原有逻辑的写法
const a = {}; (a.b ??= {}).c = 1; console.log(a); // 输出 { b: { c: 1 } }
原理说明
a.b ??= {}是ES2020引入的空值合并赋值运算符,它会先判断a.b是否为null或undefined:
- 如果是,就给
a.b赋值为空对象; - 如果不是,就保留
a.b原有的值。
这个表达式本身会返回赋值后的a.b,所以我们可以直接链式访问它的c属性并赋值,完全不会丢失a.b原本的其他数据。比如如果a.b原本是{ d: 2 },执行后a.b会变成{ d: 2, c: 1 },和你原来两行代码的行为完全一致。
避免踩坑:别用错误的运算符
注意不要写成(a.b ||= {}).c = 1,因为||=会把所有假值(比如0、''、false)都当成需要替换的情况,而你原代码用的??=只针对null/undefined,前者会意外覆盖a.b的合法假值属性,不符合你的需求。
内容的提问来源于stack exchange,提问作者WillD
相关产品推荐
相关产品推荐

