假设我在 es6 中使用这种语法:
let a, b;
{a, b} = { a: 100, b: 300 };
代码将正常运行;
但是让我们重写是这样的:
function fn() {
return { a: 100, b: 200 }
}
let a, b;
{ a, b } = fn();
当我运行上面的代码时,它说意外令牌“=”;我有点困惑,有什么区别?
假设我在 es6 中使用这种语法:
let a, b;
{a, b} = { a: 100, b: 300 };
代码将正常运行;
但是让我们重写是这样的:
function fn() {
return { a: 100, b: 200 }
}
let a, b;
{ a, b } = fn();
当我运行上面的代码时,它说意外令牌“=”;我有点困惑,有什么区别?
添加圆括号:({ 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
将对象赋值用括号括起来
({a ,b} = fn());
使用 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();