如何更优雅地解构带默认值的嵌套对象?
优化嵌套对象的安全取值方案
嘿,这个问题我之前在项目里也纠结过——重复写默认对象确实有点冗余,而且还得受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
相关产品推荐
相关产品推荐

