Destructuring assignment cause error: "unexpected token ="
Destructuring assignment cause error: "unexpected token ="
假设我在 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 代替 {a,b}:
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());
假设我在 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 代替 {a,b}:
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());