【问题标题】:Difference between object destructuring and and destructuring assignment?对象解构和解构赋值之间的区别?
【发布时间】:2018-08-08 14:39:53
【问题描述】:

例如,如果我有这样的对象:

let obj = { a: 1, b: 2 }
let { a, b } = obj;
console.log(a, b); // output 1, 2

但是如果 a 和 b 被初始化,像这样:

let obj = { a: 1, b: 2 };
let a = 3, b = 4;
{ a, b } = obj;
console.log(a, b); // error

它们有什么区别,为什么第二个输出错误?

【问题讨论】:

    标签: javascript ecmascript-6 destructuring


    【解决方案1】:

    您需要在 destructuring assignment 周围加上括号,以便将解构与无法赋值的 block statement 区分开来。

    Assignment without declaration:

    使用没有声明的对象字面量解构赋值时,赋值语句周围的圆括号( ... ) 是必需的语法。

    {a, b} = {a: 1, b: 2} 不是有效的独立语法,因为左侧的 {a, b} 被视为块而不是对象字面量。

    但是,({a, b} = {a: 1, b: 2}) 是有效的,var {a, b} = {a: 1, b: 2} 也是如此

    注意:您的( ... ) 表达式前面需要有一个分号,否则它可能用于执行上一行的函数。

    let obj = { a: 1, b: 2 };
    let a = 3, b = 4;
    
    ({ a, b } = obj);
    console.log(a, b); // 1, 2

    【讨论】:

    • 但是为什么要这样,也许我不懂块语句
    • block statement 是遵循for 语句的结构,例如。请查看链接以获取更多信息。
    • 为什么用括号括起来的赋值生效,以及为什么在它生效之前添加 var。
    • 它将里面的部分转换为expression。并且块语句不是表达式。
    猜你喜欢
    • 2017-03-18
    • 2018-05-10
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    相关资源
    最近更新 更多