Quand j'utilise des accolades avec la fonction javascript, j'obtiens un résultat inattendu. Je cherchais à voir si quelqu'un pouvait m'aider à comprendre ce qui se passe?
const ages = [3, 10, 18, 20] let x x = ages.some( (a) => a===18) // x is true x = ages.some( (a) => {a===18}) // x is false
Vous vous demandez pourquoi x donne la valeur false lorsque j'ajoute des accolades. Quelqu'un pourrait-il vous expliquer?
5 Réponses :
Sans accolades, le corps de votre fonction est limité à une seule expression et la valeur de retour devient automatiquement le résultat de cette expression.
Mais avec {
}
la fonction se comporte comme n'importe quel autre bloc de code: elle ne renvoie pas implicitement de valeur (c'est-à-dire qu'elle évalue à undefined code >) sauf si vous utilisez une instruction
return
explicite.
(x) => x + 1
équivaut à (x) => {return x + 1; }
.
Je doute vraiment que cette question ait besoin d'une réponse, et est probablement une duplication de quelque chose.
@kemicofa Trouvez-moi une copie convaincante et je voterai pour elle.
Lorsque vous utilisez des accolades, vous devez renvoyer le résultat, sinon il renvoie undefined, ce qui signifie que {a === 18}
sera toujours considéré comme faux.
Vous devriez écrire
x = ages.some( (a) => {return a===18})
=>
sans accolades, il renvoie a === 18
valeur booléenne
mais dans le second cas, vous devez renvoyer cette valeur comme x = ages.some ((a) => {return a === 18})
La fonction de flèche a quelque chose appelé retours implicites.
Donc, si vous écrivez une expression comme corps de la fonction de flèche, elle renverra automatiquement le résultat.
Donc pour x = ages.some ((a) => a === 18)
, le chèque a === 18
est renvoyé automatiquement comme résultat . De la même manière que si vous aviez écrit x = ages.some ((a) => {return a === 18;})
.
Pour la version avec crochets, vous n'ajoutez pas de valeur de retour, donc elle retourne toujours undefined, même si a vaut 18. Vous devrez retourner explicitement pour que cela fonctionne comme indiqué ci-dessus.
La fonction Array.some () renvoie true
si au moins un élément renvoie true
pour le rappel. Donc, écrit sans les crochets, vous retournez true pour le 3ème élément du tableau et false pour les autres, ce qui donne true
pour la variable x
.
Dans la version avec crochets, vous retournez toujours indéfini
car la fonction ne renvoie rien. Undefined est converti en faux pour toutes les valeurs et, par conséquent, le résultat final est que la variable x
est également fausse.
Voici un bon exemple des différentes façons dont les fonctions peuvent être écrites dans JS, et comment elles fonctionnent. En gros, gardez à l'esprit que la flèche fonctionne sans les accolades sont simplement un raccourci pour return
.
() => {return 'foo'; }
est identique à () => 'foo';
//regular function with no return value var a = 'bar'; const myFunc1 = function() { a = 'foo'; } console.log(myFunc1(), a); //regular function with a return value a = 'bar'; const myFunc2 = function() { return a = 'foo'; } console.log(myFunc2(), a); //arrow function with a return value a = 'bar'; const myFunc3 = () => { return b = 'foo'; } console.log(myFunc3(), a); //arrow function with no return value a = 'bar'; const myFunc4 = () => { b = 'foo'; } console.log(myFunc4(), a); //arrow function using shorthand, which has an implicit return value a = 'bar'; const myFunc5 = () => b = 'foo'; console.log(myFunc5(), a);
Pas d'accolades = renvoie automatiquement le résultat, Accolades = nécessitant explicitement l'instruction
return
. Donc dans votre exemple avec les accolades, vous retournez undefined à chaque fois ... car vous devez écrire explicitementreturn