为什么在此表达式中需要括号?

时间:2019-04-16 15:34:28

标签: javascript node.js spread

在以下代码段中:

// Error code:
(y,...x) => {...x,y};
// output = "SyntaxError: Unexpected token ..."

// Expected result:
(y,...x) => ({...x,y});

我不太明白为什么需要“()”来包围对象字面量。我怀疑这是由于蔓延运算符,因为当我删除它时,我不再需要括号。我肯定会在这里遗漏一些明显的东西吗?

2 个答案:

答案 0 :(得分:2)

{x,y}是一个块,其求值xy,不执行任何操作,然后返回undefined

添加...会导致语法错误,因为那不是有效的语句。

括号强制将其解析为表达式。

答案 1 :(得分:1)

需要括号以从箭头函数隐式返回对象文字

不带括号的花括号将被视为函数的主体,因此它们有助于强制解析器将对象文字视为表达式,从而不将其视为阻塞语句。

(y,...x) => ({ ...x, y });

等效于:

(y,...x) => { return { ...x, y }; };