【问题标题】:Destructuring nested object having null value cause "TypeError: cannot read property 'obj2' of null"解构具有空值的嵌套对象导致“TypeError:无法读取 null 的属性 'obj2'”
【发布时间】:2019-11-10 18:31:02
【问题描述】:
我尝试解构具有 null 值的嵌套对象,但它导致“TypeError:无法读取 null 的属性 'obj2'”。
我阅读了有关修复它的信息,但它适用于非嵌套元素。
看一下代码 sn-p。
const tmp = { obj: null };
let { obj: { obj2 } = {} } = tmp || {};
我希望解构对象和 obj2 为 null 或未定义,但这会导致错误:(
当我使用“undefined”而不是“null”时效果很好,但我需要使用“null”的大小写。
【问题讨论】:
标签:
javascript
null
destructuring
【解决方案1】:
ES6 解构默认值仅在属性为undefined 时有效。在任何其他情况下,它将获得传递的值。甚至是 Javascript 的虚假值。
一种规避方法是缩短可能的虚假值,在这种情况下obj 将是null。
const tmp = { obj: null };
const { obj } = tmp;
const { obj2 = {} } = obj || {};
console.log(obj);
console.log(obj2);
【解决方案2】:
你将无法通过解构来做到这一点。简单来说,和默认的函数参数一样,默认解构值只有在值未定义时才应用,而不是 null 或其他虚假值。
作为替代方案,您可以这样做:
const tmp = { obj: null };
let obj2 = tmp && tmp.obj && tmp.obj.obj2;
【解决方案3】:
谢谢大家@Dez @junvar
我把我的代码改成这样:
const tmp = { obj: null };
const obj2 = tmp?.obj?.obj2;
console.log(obj2);