【问题标题】: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);
        

        【讨论】:

          猜你喜欢
          • 2021-07-19
          • 1970-01-01
          • 1970-01-01
          • 2020-01-29
          • 1970-01-01
          • 2022-01-12
          • 2021-12-04
          • 2021-12-17
          • 2022-01-09
          相关资源
          最近更新 更多