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?
The most common and standard way of returning an object from an arrow function would be to use the longform syntax: const createMilkshake = (name) => { return { name, price: 499 }; }; const raspberry = createMilkshake('Raspberry'); // 'Raspberry' console.
Arrow functions cannot be used as constructors and will throw an error when used with new .
Arrow functions allow you to have an implicit return: values are returned without having to use the return keyword.
It's a new feature that introduced in ES6 and is called arrow function. The left part denotes the input of a function and the right part the output of that function.
You may wonder, why the syntax is valid (but not working as expected):
var func = p => { foo: "bar" }
It's because of JavaScript's label syntax:
So if you transpile the above code to ES5, it should look like:
var func = function (p) { foo: "bar"; //obviously no return here! }
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With