首页 > 编程知识 正文

es6面向对象阮一峰,解构赋值 es6

时间:2023-05-05 22:02:02 阅读:237026 作者:3386

最近看wqdhb的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 // 1loc // 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 就是这么来的。
wqdhb的es6地址:https://es6.ruanyifeng.com/#docs/destructuring
end

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。