【问题标题】:Object deconstruction assignment without variable declaration in ES6ES6中没有变量声明的对象解构赋值
【发布时间】:2020-03-15 20:46:51
【问题描述】:

在 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


    【解决方案1】:

    括号被解释为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);

    【讨论】:

    • @Rajesh var1 只是上面声明的变量。
    【解决方案2】:

    您可以将它们组合起来,而不是声明变量和条件解构,并使用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);

    【讨论】:

    • if 语句中没有重音符号,这只是用于从父作用域分配变量的示例。
    猜你喜欢
    • 2019-07-11
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    相关资源
    最近更新 更多