传播语法后使用分号jn javascript中断执行错误"Unexpected token ="

And*_*lov 2 javascript spread-syntax

有人可以解释我为什么

const getabc = ()=> ({a:'aa',b:'bb',c:123});
let a, b, c;
{ a, b, c } = {...getabc()}
Run Code Online (Sandbox Code Playgroud)

这很有效

const getabc = ()=> ({a:'aa',b:'bb',c:123});
let a, b, c;
{ a, b, c } = {...getabc()};
Run Code Online (Sandbox Code Playgroud)

这不(注意末尾的分号)

JLR*_*she 6

这与扩展语法或分号无关.

对象解构赋值之前没有类似的var,const或者let必须使用括号(或者以某种其他方式作为包含它的较大语句中的表达式出现),因为否则JS将解析左括号作为块的开头:

const getabc = ()=>({a:'aa',b:'bb',c:123});
let a, b, c;
({ a, b, c } = {...getabc()});
Run Code Online (Sandbox Code Playgroud)

同时,这里使用扩展语法没有意义,所以你可以删除它:

const getabc = ()=>({a:'aa',b:'bb',c:123});
let a, b, c;
({ a, b, c } = getabc());
Run Code Online (Sandbox Code Playgroud)


Jor*_*jon 5

根据MDN 文档,您缺少括号:

可以通过与其声明分开的解构来为变量分配其值。

var a, b;

({a, b} = {a: 1, b: 2});
Run Code Online (Sandbox Code Playgroud)

var a, b;

({a, b} = {a: 1, b: 2});
Run Code Online (Sandbox Code Playgroud)

我的猜测是,第一个是 Chrome 实现中的错误,因为 Firefox 会抛出错误。

铬合金

在此输入图像描述

火狐浏览器

在此输入图像描述