如何使用默认值解构具有空值的嵌套对象

时间:2019-05-13 08:55:35

标签: javascript object ecmascript-6

当尝试分解可能为null的嵌套对象时,未使用默认值。

我已经通过多个阶段的分解来实现了这一目标,但如果可能的话,宁愿在单个阶段中完成。

const obj = { a: null };
const { a: { b, c } = {} } = obj;

这会导致错误:
Cannot destructure property 'b' of 'undefined' or 'null'

我希望b和c为undefined

3 个答案:

答案 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

检查该值

仍然可以使用解构来执行此操作。但是,传统的nullundefined检查更容易理解。

let obj = { a: null },
  a = obj.a,
  b, c;

if (typeof a !== "undefined" && a !== null) {
  b = obj.a.b;
  c = obj.a.b;
}