读阮一峰ES6对象解构赋值小细节

最近看阮一峰的ES6发现了个地方有点不懂,理解之后,特意记录下来。
在这里插入图片描述

let obj = {};
let arr = [];

({ foo: obj.prop, bar: arr[0] } = { foo: 123, bar: true });

obj // {prop:123}
arr // [true]

就是上面这块。
首先是外面这个括号,我们知道如果提前定义了一个变量,下面再来解构赋值就得加上括号而不是下面这样

	let a;
    let b;
    let [a, b] = [1, 2];
    // Uncaught SyntaxError: Identifier 'a' has already been declared 报错了

然后是里面的东西,我们读前面的内容之后

const node = {
  loc: {
    start: {
      line: 1,
      column: 5
    }
  }
};

let { loc, loc: { start }, loc: { start: { line }} } = node;
line // 1
loc  // Object {start: Object}
start // Object {line: 1, column: 5}

我们发现,给对象解构赋值的时候, ’ : ’ 冒号表示这个对象是个模式,而不是变量,只有 ’ = '等号或者不加等号才表示变量赋值,比如

    let a;
    let b;
    ({a, b} = {a: 10, b: 12})
    // ({a = 0, b} = {a: undefined, b: 12})

所以

({ foo: obj.prop, bar: arr[0] } = { foo: 123, bar: true });

这里面跟前面的例子一样,赋值是赋给 obj 的 prop 以及 arr 的第 0 项!
依照一一对应,所以 obj.prop 赋值 123, 而 arr[0] 赋值 true 就是这么来的。
阮一峰的es6地址:https://es6.ruanyifeng.com/#docs/destructuring
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值