协慌网

登录 贡献 社区

返回对象的 ECMAScript 6 箭头函数

从箭头函数返回对象时,由于语法上的歧义{}return

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

如果 arrow 函数返回的不是对象,则{}return都是不必要的,例如: p => "foo"

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

修改后的p => {"foo": "bar"}抛出SyntaxError :意外令牌:' : '”

有什么明显的我想念的东西吗?

答案

您必须将返回的对象文字包装在括号中。否则,花括号将被视为表示功能的主体。以下作品:

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

您不需要将任何其他表达式包装到括号中:

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

等等。

参考: MDN - 返回对象文字

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

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

这是因为JavaScript 的标签语法

因此,如果将上面的代码转换为 ES5,它应该看起来像:

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

如果 arrow 函数的主体用花括号括起来,则不会隐式返回。将对象包装在括号中。它看起来像这样。

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

通过将主体包装在括号中,该函数将返回{ foo: 'bar }

希望可以解决您的问题。如果不是这样,我最近写了一篇有关 Arrow 函数的文章,其中对其进行了更详细的介绍。希望对你有帮助。 Javascript 箭头函数