1
votes

Différence entre le code avec accolades et un sans

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?


1 commentaires

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 explicitement return


5 Réponses :


0
votes

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 ) sauf si vous utilisez une instruction return explicite.

(x) => x + 1 équivaut à (x) => {return x + 1; } .


2 commentaires

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.



0
votes

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})


0 commentaires

0
votes

=> 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})


0 commentaires

1
votes

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.


0 commentaires

0
votes

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);


0 commentaires