¿Qué significan los paréntesis que envuelven el object literal en una function de flecha?

He visto código JavaScript como este:

let a = () => ({ id: 'abc', name: 'xyz' }) 

¿A qué se refieren los paréntesis ( … ) envuelven el object en esta instancia? ¿Es una forma abreviada de return ?

No. Esos paréntesis tampoco están envolviendo un object literal, sino que producen un object literal. Las funciones de flecha tienen muchas syntax, una de las cuales es:

 ( … ) => expression 

Esto devolverá implícitamente una expresión, por ejemplo:

 () => 1 + 1 

Esta function devolverá implícitamente 1 + 1 , que es 2 . Otro es esto:

 ( … ) => { … } 

Esto creará un bloque para albergar múltiples declaraciones si no desea devolver implícitamente una expresión, y si desea hacer cálculos intermedios o no devolver un valor en absoluto. Por ejemplo:

 () => { const user = getUserFromDatabase(); console.log(user.firstName, user.lastName); } 

El problema surge cuando quieres devolver implícitamente un object literal. No puede usar ( … ) => { … } porque se interpretará como un bloque. La solución es usar paréntesis.

Los paréntesis están ahí para que { … } se interprete como un object literal, no como un bloque. En el operador de agrupamiento , ( … ) , solo las expresiones pueden existir dentro de ellos. Los bloques no son expresiones, sino literales de object, por lo que se supone un literal de object. Por lo tanto, en lugar de crear un bloque, usará esta syntax:

 ( … ) => expression 

Y devuelve implícitamente un object literal. Sin los paréntesis, se interpretará como tags y cadenas, no como keys y valores de un object literal.

 let a = () => { id: 'abc', //interpreted as label with string then comma operator name: 'xyz' // interpreted as label (throws syntax error) } 

La coma aquí se interpretaría como el operador de coma , y dado que los operandos deben ser expresiones , y las tags son enunciados, arrojará un error de syntax.

Te permite crear una expresión , por lo

 let a = () => ({ id: 'abc', name: 'xyz' }) 

especifica que cuando se invoca, devuelve el object adjunto

Si elimina el () en este caso, arrojará un error porque no es una statement de cuerpo de function válida, porque {} en let a = () => { id: 'abc', name: 'xyz' } se interpretan como los límites de una statement, pero el contenido interno no es válido si lo miras.

 let a = () => { id: 'abc', /* Not valid JS syntax */ name: 'xyz' }