我一直在尝试弄清楚嵌套的 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,
} = {},
// ^^^^
} = {};
默认初始化器在目标之后(这里是内部解构表达式)。如果您希望同时初始化变量 a
和 b
,那么除了两个赋值之外,您无能为力:
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/