ES6中没有变量声明的对象解构分配

问题描述 投票:1回答:2

ES6中是否可以具有解构的赋值表达式,而无需声明变量?

换句话说,为什么以下代码在语法上不正确?

((我知道可以使用很多方法来重写此代码。)

'use strict';

let var1 = 'defaultVal1', var2 = 'defaultVal2';
const obj = { group: { var1: 'newVal1', var2: 'newVal2' } }
if (obj) {
  { group: { var1, var2 } } = obj; // No 'let'/'const' keyword, i.e. no redeclaration, but invalid expression
}
console.log(var1);
console.log(var2);

javascript ecmascript-6 ecmascript-next
2个回答
5
投票

方括号被解释为block statement,但是您需要一个表达式。可以通过用括号将其括起来作为assignment without declaration来存档。

'use strict';

let var1 = 'defaultVal1', var2 = 'defaultVal2';
const obj = { group: { var1: 'newVal1', var2: 'newVal2' } }
if (obj) {
  ({ group: { var1, var2 } } = obj); // No 'let'/'const' keyword, i.e. no redeclaration, but invalid expression
}
console.log(var1);
console.log(var2);

0
投票

代替声明变量和有条件地进行结构分解,可以将它们组合起来,并使用short-circuit评估来使用后备(|| {}),然后将defaults用作值:

'use strict';

const obj = { group: { var1: 'newVal1', var2: 'newVal2' } };

const { group: { var1 = 'defaultVal1', var2 = 'defaultVal2' } = {}} = obj || {};

console.log(var1);
console.log(var2);
© www.soinside.com 2019 - 2024. All rights reserved.