ECMAScript 6 arrow function that returns an object

arrow-functions, ecmascript-6, javascript

Solution

You must wrap the returning object literal into parentheses. Otherwise curly braces will be considered to denote the function’s body. The following works:

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

You don't need to wrap any other expression into parentheses:

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

and so on.

Reference: MDN - Returning object literals

Problem

When returning an object from an arrow function, it seems that it is necessary to use an extra set of `{}` and a `return` keyword because of an ambiguity in the grammar. That means I can’t write `p => {foo: "bar"}`, but have to write `p => { return {foo: "bar"}; }`. If the arrow function returns anything other than an object, the `{}` and `return` are unnecessary, e.g.: `p => "foo"`. `p => {foo: "bar"}` returns `undefined`. A modified `p => {"foo": "bar"}` throws “`SyntaxError`: unexpected token: '`:`'”. Is there something obvious I am missing?

Original source

Related problems