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

如何更优雅地解构带默认值的嵌套对象?

优化嵌套对象的安全取值方案

嘿,这个问题我之前在项目里也纠结过——重复写默认对象确实有点冗余,而且还得受lint规则限制,咱们来换个更优雅的思路:

方案一:分层预设兜底对象(解构风格)

你可以给nestedObject直接预设一个包含默认id的兜底对象,这样只需要定义一次默认值,就能同时处理nestedObject不存在、或者它内部id不存在的两种情况:

const unreliableObject = {
  id: 10,
  nestedObject: { // 可能不存在
    id: 11 // 也可能不存在
  }
};

// 优化后的解构写法
const { nestedObject: { id: key = -1 } = { id: -1 } } = unreliableObject;
console.log(key); 
// 正常场景输出11;nestedObject不存在/内部id不存在时,输出-1

这里的核心是把兜底对象{ id: -1 }只定义一次,既作为nestedObject的默认值,又能让内部的id解构时直接复用这个默认值,完美避免了重复代码。

方案二:可选链+空值合并(可读性优先)

如果觉得解构的写法还是有点绕,推荐用可选链操作符?.结合空值合并运算符??,这种写法逻辑直白,可读性拉满,而且完全符合你的要求:

const key = unreliableObject.nestedObject?.id ?? -1;
console.log(key);

这个写法的逻辑拆解:

  • unreliableObject.nestedObject?.id:用?.安全访问嵌套属性,只要nestedObject不存在,或者它的id不存在,整个表达式就返回undefined
  • ?? -1:如果前面的结果是undefined或null,就用-1作为兜底值

这种写法既没有重复定义默认值,也没用到空对象,lint规则也不会找茬,日常开发里我自己也更喜欢用这种方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:46:09