757
4

6 回答 6

1293

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

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

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

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

等等。

参考:MDN - 返回对象字面量

于 2015-02-27T17:10:23.373 回答
72

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

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

这是因为JavaScript 的标签语法

所以如果你把上面的代码转换成 ES5,它应该是这样的:

var func = function (p) {
  foo:
  "bar"; //obviously no return here!
}
于 2016-06-15T09:40:32.597 回答
21

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

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

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

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

于 2017-08-09T08:48:57.033 回答
8

ES6 箭头函数返回一个对象

正确的方法

  1. 普通函数返回一个对象

const getUser = user => {return { name: user.name, age: user.age };};

const user = { name: "xgqfrms", age: 21 };

console.log(getUser(user));
//  {name: "xgqfrms", age: 21}

  1. (js表达式)

const getUser = user => ({ name: user.name, age: user.age });

const user = { name: "xgqfrms", age: 21 };

console.log(getUser(user));
//  {name: "xgqfrms", age: 21}

解释

图片

参考

https://github.com/lydiahallie/javascript-questions/issues/220

https://mariusschulz.com/blog/returning-object-literals-from-arrow-functions-in-javascript

于 2019-08-22T04:01:50.537 回答
8

问题:

当你这样做时:

p => {foo: "bar"}

JavaScript 解释器认为您正在打开一个多语句代码块,并且在该代码块中,您必须明确提及 return 语句。

解决方案:

如果您的箭头函数表达式有一个语句,那么您可以使用以下语法:

p => ({foo: "bar", attr2: "some value", "attr3": "syntax choices"})

但是,如果您想拥有多个语句,则可以使用以下语法:

p => {return {foo: "bar", attr2: "some value", "attr3": "syntax choices"}}

在上面的例子中,第一组花括号打开一个多语句代码块,第二组花括号用于动态对象。在箭头函数的多语句代码块中,您必须显式使用返回语句

有关更多详细信息,请查看Mozilla Docs for JS Arrow Function Expressions

于 2019-10-02T13:11:51.283 回答
-6

您可以随时查看更多自定义解决方案:

x => ({}[x.name] = x);
于 2019-07-25T12:49:15.883 回答