当尝试分解可能为null的嵌套对象时,未使用默认值。
我已经通过多个阶段的分解来实现了这一目标,但如果可能的话,宁愿在单个阶段中完成。
const obj = { a: null };
const { a: { b, c } = {} } = obj;
这会导致错误:
Cannot destructure property 'b' of 'undefined' or 'null'
我希望b和c为undefined
答案 0 :(得分:1)
要使用default value,要破坏的值必须为undefined
。
const obj = { a: undefined };
const { a: { b, c } = {} } = obj;
console.log(b, c)
答案 1 :(得分:0)
您可以将null
更改为临时对象中的空对象。在对象条目上使用map()
,将null
更改为空对象{}
,然后使用Object.fromEntries
const obj = { a: null };
const { a: { b, c } = {} } = Object.fromEntries(Object.entries(obj).map(x => x[1] === null ? {} : x));
console.log(b,c)
答案 2 :(得分:0)
在transpiling之后,您的代码如下所示:
var obj = { a: null };
var _obj$a = obj.a;
_obj$a = _obj$a === void 0 ? {} : _obj$a;
var b = _obj$a.b,
c = _obj$a.c;
这里_obj$a
是引用obj.a
的临时变量。如果提供了默认值,它将仅针对void 0
(或undefined
)而不是针对null
您仍然可以使用解构来执行此操作。但是,传统的null
和undefined
检查更容易理解。
let obj = { a: null },
a = obj.a,
b, c;
if (typeof a !== "undefined" && a !== null) {
b = obj.a.b;
c = obj.a.b;
}