ECMAScript 6 返回对象的箭头函数

从箭头函数返回对象时,由于语法中的歧义,似乎有必要使用一组额外的和一个关键字。{}return

这意味着我不能写,但必须写。p => {foo: "bar"}p => { return {foo: "bar"}; }

如果 arrow 函数返回对象以外的任何内容,则 和 是不必要的,例如:.{}returnp => "foo"

p => {foo: "bar"}返回。undefined

修改后将引发语法错误:意外标记:''”。p => {"foo": "bar"}

我错过了什么明显的东西吗?


答案 1

必须将返回的对象文本括到括号中。否则,将考虑使用大括号来表示函数的主体。以下工作原理:

p => ({ foo: 'bar' });

您无需将任何其他表达式括到括号中:

p => 10;
p => 'foo';
p => true;
p => [1,2,3];
p => null;
p => /^foo$/;

等等。

参考:MDN - 返回对象文本


答案 2

您可能想知道,为什么语法有效(但未按预期工作):

var func = p => { foo: "bar" }

这是因为JavaScript的标签语法

因此,如果您将上述代码转译为ES5,它应该看起来像这样:

var func = function (p) {
  foo:
  "bar"; //obviously no return here!
}