在以下代码段中:
// Error code:
(y,...x) => {...x,y};
// output = "SyntaxError: Unexpected token ..."
// Expected result:
(y,...x) => ({...x,y});
我不太明白为什么需要“()”来包围对象字面量。我怀疑这是由于蔓延运算符,因为当我删除它时,我不再需要括号。我肯定会在这里遗漏一些明显的东西吗?
答案 0 :(得分:2)
{x,y}
是一个块,其求值x
和y
,不执行任何操作,然后返回undefined
。
添加...
会导致语法错误,因为那不是有效的语句。
括号强制将其解析为表达式。
答案 1 :(得分:1)
需要括号以从箭头函数隐式返回对象文字。
不带括号的花括号将被视为函数的主体,因此它们有助于强制解析器将对象文字视为表达式,从而不将其视为阻塞语句。
(y,...x) => ({ ...x, y });
等效于:
(y,...x) => { return { ...x, y }; };