Lors du retour d'un objet à partir d'une fonction flèche, il semble qu'il soit nécessaire d'utiliser un ensemble supplémentaire de {}
et un return
mot clé en raison d'une ambiguïté dans la grammaire.
Cela signifie que je ne peux pas écrire p => {foo: "bar"}
, mais que je dois écrire p => { return {foo: "bar"}; }
.
Si la fonction de flèche retourne autre chose qu'un objet, {}
et ne return
sont pas nécessaires, par exemple: p => "foo"
.
p => {foo: "bar"}
retourne undefined
.
Une modification p => {"foo": "bar"}
renvoie « SyntaxError
: jeton inattendu: ' :
» » .
Y a-t-il quelque chose d'évident qui me manque?
la source
p
comme clé pour le littéral d'objet, voici comment vous le faites:p => ({ [p]: 'bar' })
. Sans le[]
, ce sera soitundefined
littéralement la lettrep
.Vous vous demandez peut-être pourquoi la syntaxe est valide (mais ne fonctionne pas comme prévu):
C'est à cause de la syntaxe d'étiquette de JavaScript :
Donc, si vous transpilez le code ci-dessus en ES5, il devrait ressembler à:
la source
Si le corps de la fonction flèche est entouré d'accolades, il n'est pas renvoyé implicitement. Enveloppez l'objet entre parenthèses. Cela ressemblerait à quelque chose comme ça.
En enveloppant le corps entre parenthèses, la fonction reviendra
{ foo: 'bar }
.J'espère que cela résout votre problème. Sinon, j'ai récemment écrit un article sur les fonctions Flèche qui le couvre plus en détail. J'espère que tu trouves cela utile. Fonctions de flèche Javascript
la source
les bonnes façons
Explique
https://github.com/lydiahallie/javascript-questions/issues/220
https://mariusschulz.com/blog/returning-object-literals-from-arrow-functions-in-javascript
la source
Problème:
Quand vous faites:
L'interpréteur JavaScript pense que vous ouvrez un bloc de code multi-instructions, et dans ce bloc, vous devez mentionner explicitement une instruction de retour.
Solution:
Si votre expression de fonction de flèche a une seule instruction , vous pouvez utiliser la syntaxe suivante:
Mais si vous souhaitez avoir plusieurs instructions, vous pouvez utiliser la syntaxe suivante:
Dans l'exemple ci-dessus, le premier ensemble d'accolades ouvre un bloc de code à instructions multiples et le deuxième ensemble d'accolades est destiné aux objets dynamiques. Dans le bloc de code à instructions multiples de la fonction flèche, vous devez utiliser explicitement les instructions de retour
Pour plus de détails, consultez Mozilla Docs pour les expressions de fonction JS Arrow
la source
Vous pouvez toujours vérifier cela pour des solutions plus personnalisées:
la source