javascript - 如何解构和初始化同一表达式中缺失的嵌套字段?

标签 javascript ecmascript-6 destructuring

我一直在尝试弄清楚嵌套的 ES6 解构是否支持此功能。如果 a 不存在,我想将其分配为空对象,然后将其属性名称 b 分配给范围变量 b .

var {
  a = {},
  a: {
    b = 2,
  },
} = {};

VM40:4 Uncaught TypeError: Cannot destructure property `b` of 'undefined' or 'null'.
    at <anonymous>:6:5

如果不假设对象格式,我似乎无法真正嵌套解构。以下方法有效,但我正在寻找一种更简洁的方法,您可以在其中轻松查看原始对象的嵌套布局。

var {
  a = {},
} = {};

var {
  b = 2,
} = a;

// works as expected
// starts to look crazy when 'forking' branches that may or may not exist

最佳答案

你在找

var {
  a: {
    b = 2,
  } = {},
//  ^^^^
} = {};

默认初始化器在目标之后(这里是内部解构表达式)。如果您希望同时初始化变量 ab,那么除了两个赋值之外,您无能为力:

var {
  a = {},
} = {},
{
  b = 2,
} = a;

这可能看起来像您一样使用两个 var 声明更清晰。如果你坚持在一个嵌套表达式中做,你可以做

var {
  a = {}, // short for `a: a = {}`
  a: {
    b = 2,
  } = a, // use either `a` or another empty object as the default
} = {};

但我认为这很难读。

关于javascript - 如何解构和初始化同一表达式中缺失的嵌套字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775931/

相关文章:

javascript - C3.js 图例重叠

javascript - ES6 语法在 WebStorm 的 .vue 文件中突出显示为错误。我怎样才能解决这个问题?

javascript - 将 Angular 从 5.1 升级到 8 后 NgStyle 出现问题

javascript - 参数未知时的 Cypher MATCH 请求

swift - 解构赋值是否保证在 Swift 中是并行赋值?

javascript - JavaScript 中的数组解构

javascript - Jquerymobile 选择菜单不适用于超过 73 条记录

javascript - Photoshop 的 Extendscript 或 Javascript 中是否有任何 'document.getElementById' 等效项?

JavaScript:当数组为空时解构对象数组时出错

javascript - 图像悬停时的 CSS 颜色叠加