销毁具有null值的嵌套对象会导致“ TypeError:无法读取null的属性'obj2'”

我尝试解构具有null值的嵌套对象,但是它导致“ TypeError:无法读取null的属性'obj2'”。

我读过有关修复它的信息,但是它适用于非嵌套元素。

看看代码片段。

const tmp = { obj: null };

let { obj: { obj2 } = {} } = tmp || {};

我希望分解对象和obj2为null或未定义,但这会导致错误:(

当我使用“ undefined”而不是“ null”时效果很好,但是我需要使用“ null”的情况。

zuochang0529 回答:销毁具有null值的嵌套对象会导致“ TypeError:无法读取null的属性'obj2'”

ES6解构默认值仅在属性为undefined时有效。在任何其他情况下,它将获得传递的赋值。甚至Javascript虚假的值。

一种规避方法是缩短可能的虚假值,在这种情况下,obj将是null

const tmp = { obj: null };

const { obj } = tmp;

const { obj2 = {} } = obj || {};

console.log(obj);
console.log(obj2);

 

,

您将无法通过销毁做到这一点。简而言之,就像默认的functin参数一样,默认的解构值仅在值未定义时才应用,而不是null或其他虚假值。

您也可以选择:

const tmp = { obj: null };
let obj2 = tmp && tmp.obj && tmp.obj.obj2;

,

谢谢大家@Dez @junvar

我将代码更改为:

const tmp = { obj: null };
const obj2 = tmp?.obj?.obj2;
console.log(obj2);
本文链接:https://www.f2er.com/3136199.html

大家都在问