我尝试解构具有null值的嵌套对象,但是它导致“ TypeError:无法读取null的属性'obj2'”。
我读过有关修复它的信息,但是它适用于非嵌套元素。
看看代码片段。
const tmp = { obj: null };
let { obj: { obj2 } = {} } = tmp || {};
我希望分解对象和obj2为null或未定义,但这会导致错误:(
当我使用“ undefined”而不是“ null”时效果很好,但是我需要使用“ null”的情况。
我尝试解构具有null值的嵌套对象,但是它导致“ TypeError:无法读取null的属性'obj2'”。
我读过有关修复它的信息,但是它适用于非嵌套元素。
看看代码片段。
const tmp = { obj: null };
let { obj: { obj2 } = {} } = tmp || {};
我希望分解对象和obj2为null或未定义,但这会导致错误:(
当我使用“ undefined”而不是“ null”时效果很好,但是我需要使用“ null”的情况。
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);