Al devolver un objeto desde una función de flecha, parece que es necesario usar un conjunto adicional de {}
y una return
palabra clave debido a una ambigüedad en la gramática.
Eso significa que no puedo escribir p => {foo: "bar"}
, pero tengo que escribir p => { return {foo: "bar"}; }
.
Si la función devuelve flecha otra cosa que no sea un objeto, el {}
y return
no son necesarios, por ejemplo: p => "foo"
.
p => {foo: "bar"}
vuelve undefined
.
Un p => {"foo": "bar"}
lanzamiento modificado " SyntaxError
: token inesperado: ' :
'" .
¿Hay algo obvio que me estoy perdiendo?
fuente
p
tan clave para el objeto literal, así es como se hace:p => ({ [p]: 'bar' })
. Sin el[]
, seráundefined
o literalmente la letrap
.Quizás se pregunte por qué la sintaxis es válida (pero no funciona como se esperaba):
Se debe a la sintaxis de la etiqueta de JavaScript :
Entonces, si transpila el código anterior a ES5, debería verse así:
fuente
Si el cuerpo de la función de flecha está envuelto en llaves, no se devuelve implícitamente. Envuelva el objeto entre paréntesis. Se vería algo así.
Al envolver el cuerpo en parens, la función volverá
{ foo: 'bar }
.Con suerte, eso resuelve tu problema. Si no, recientemente escribí un artículo sobre las funciones de Arrow que lo cubre con más detalle. Espero que le sea útil. Funciones de flecha de Javascript
fuente
las formas correctas
explique
https://github.com/lydiahallie/javascript-questions/issues/220
https://mariusschulz.com/blog/returning-object-literals-from-arrow-functions-in-javascript
fuente
Problema:
Cuando lo estás haciendo:
El intérprete de JavaScript cree que está abriendo un bloque de código de varias instrucciones, y en ese bloque, debe mencionar explícitamente una declaración de devolución.
Solución:
Si su expresión de función de flecha tiene una sola instrucción , puede usar la siguiente sintaxis:
Pero si desea tener varias declaraciones , puede usar la siguiente sintaxis:
En el ejemplo anterior, el primer conjunto de llaves abre un bloque de código de varias instrucciones, y el segundo conjunto de llaves es para objetos dinámicos. En el bloque de código de múltiples declaraciones de la función de flecha, debe usar explícitamente las declaraciones de retorno
Para obtener más detalles, consulte Mozilla Docs para las expresiones de la función de flecha JS
fuente
Siempre puede consultar esto para obtener más soluciones personalizadas:
fuente