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?