假设我在es6中使用此语法:
let a, b;
{a, b} = { a: 100, b: 300 };
代码将正确运行;
但是让我们这样重写:
function fn() {
return { a: 100, b: 200 }
}
let a, b;
{ a, b } = fn();
当我运行上面的代码时,它说出意外的令牌“ =“; 我有点困惑,有什么区别?
答案 0 :(得分:9)
添加大括号:({ a, b } = fn());
来自Mozilla文档:
使用不带声明的对象文字解构赋值时,赋值语句周围的圆括号(...)是必需的语法。
{a, b} = {a: 1, b: 2}
是无效的独立语法,因为左侧的{a, b}
被认为是一个块,而不是对象文字。
但是,({a, b} = {a: 1, b: 2})
有效,var {a, b} = {a: 1, b: 2}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
答案 1 :(得分:0)
将对象赋值括在括号中
a["events"]
答案 2 :(得分:-2)
使用a,b代替{a,b}:
let a, b;
a,b = { a: 100, b: 300 };
function fn() {
return { a: 100, b: 200 }
}
let a, b;
a,b = fn();