javascript - 在JavaScript中传播语法后使用分号会中断执行,并显示错误 “Unexpected token =”

标签 javascript spread-syntax

有人可以解释一下为什么

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


这有效



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


这不是(请注意最后的分号)

最佳答案

这与传播语法或分号无关。

未使用varconstlet之类的对象进行的对象分解分配必须使用括号(或以其他方式在包含它的较大语句中以表达式的形式出现),因为否则JS将解析左括号作为a的开头。块:

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


同时,这里没有使用扩展语法的意义,因此您可以删除它:

const getabc = ()=>({a:'aa',b:'bb',c:123});
let a, b, c;
({ a, b, c } = getabc());

关于javascript - 在JavaScript中传播语法后使用分号会中断执行,并显示错误 “Unexpected token =”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51003328/

相关文章:

javascript - JS的传播语法是否出现在其他语言中?

JavaScript |展开运算符更新嵌套值

javascript - 失去焦点后关闭我的日期选择器

javascript - 使用 jQuery 以 Base64 缓存图像文件

javascript - NodeJS/ExpressJS/MongoDB 简单 API 错误

javascript - express-async-handler 是做什么的?

JavaScript 传播语法与 jQuery $.extend - ByRef 和 ByVal

javascript - 嵌套激活中的 "..."实际上是如何工作的? (验证)

javascript - 字符串的展开运算符

javascript - 如何确定是否正在使用 TURN 服务器(WebRTC)?