如何在同一个表达式中构造和初始化缺失的嵌套字段?

nea*_*sic 2 javascript destructuring ecmascript-6

我一直试图弄清楚嵌套的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
Run Code Online (Sandbox Code Playgroud)

在没有假设对象格式的情况下,我似乎无法真正嵌套解构.以下工作,但我正在寻找一个更简洁的方法,您可以轻松地看到原始对象的嵌套布局.

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

var {
  b = 2,
} = a;

// works as expected
// starts to look crazy when 'forking' branches that may or may not exist
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 5

您正在寻找

var {
  a: {
    b = 2,
  } = {},
//  ^^^^
} = {};
Run Code Online (Sandbox Code Playgroud)

默认初始化程序位于目标之后(这是内部解构表达式).如果您正在寻找初始化两个变量ab,还有别的不多,你可以做其他的比有两个任务:

var {
  a = {},
} = {},
{
  b = 2,
} = a;
Run Code Online (Sandbox Code Playgroud)

这可能看起来比var你做的两个声明更清晰.如果您坚持在一个嵌套表达式中执行此操作,则可以执行此操作

var {
  a = {}, // short for `a: a = {}`
  a: {
    b = 2,
  } = a, // use either `a` or another empty object as the default
} = {};
Run Code Online (Sandbox Code Playgroud)

但我认为那是不可思议的.