6
votes

Qu'est-ce que (myvar && foo (foo ()) signifie en JavaScript?

(myVar && foo())
What does the above code mean? What is it equivalent to?I think it runs on a single line.

0 commentaires

5 Réponses :


4
votes

C'est une expression qui équivaut à "si myvar n'est pas fausse, exécutez la fonction foo ()". Si c'est utilisé comme ceci: var x = (myvar && foo ()) , le résultat sera:

Si MyVar n'est pas faux, X sera défini sur la sortie de FOO (). Si Myvar est fausse, alors X sera défini sur la valeur de Myvar.


2 commentaires

Si Myvar est de la vérité, X n'est pas défini le vrai, c'est défini sur la valeur de FOO (), tout ce qui pourrait être.


Ceci n'est pas tout à fait vrai. Si myvar est 0, alors x est réglé sur 0, pas faux.



1
votes

L'expression apporte une utilisation intelligente du court-circuit dans les expressions booléennes. FOO () ne sera exécuté que si Myvar évalue à true code>.

if (myVar) {
    foo();
}


9 commentaires

"Exploitation" "stupide" Ce sont quelques mots forts :) Si vous utilisez un JS beaucoup, cela a du sens et est clair car il se trouve.


Il existe certainement des circonstances dans lesquelles ce code n'est pas stupide par une mesure raisonnable. Tels que dans le contexte de si (activé && isvissible ()) ... ou une certaine situation.


Mots forts en effet! :) Cependant, s'il était écrit judicieusement, cette question n'aurait même pas besoin d'exister, n'est-ce pas? Critant Crockford, "JavaScript permet une expression d'être utilisée comme une déclaration. Cela peut masquer certaines erreurs, en particulier en présence d'insertion de semi-colonie." Javascript.crockford.com/code.html


@Grumdrig yup! Cela se lit assez bien. Cependant, il s'agit d'une déclaration d'expression et n'est pas très écrite à cela.


Modification de la réponse à paraître comme moins Trollbait.


Il n'y a vraiment aucune différence pratique entre une variable et une fonction dans ce cas. est si (x && y) vraiment mieux que si (x && y ()) ?


Ce n'est pas stupide de poser une question à laquelle la réponse que vous ne connaissez pas ... c'est stupide de présumer ou d'ignorer le tout. outre; Si je dis 1 + 2 = 3, ou 2 + 1 = 3 Quelle différence cela ferait-il? La réponse serait toujours 3. Donc, je ne sais pas pourquoi vous insistez sur l'utilisation de l'instruction IF comme une option recommandée à moins que les navigateurs se plaignent de la déclaration en question.


Je ne t'appelle pas stupide. J'appelais l'extrait que vous avez affiché sur le mauvais style et la pratique.


Le code de JQueryui utilise la condition condition && action () idiome beaucoup. Et oui, à mon avis, c'est une mauvaise pratique.



8
votes

L'expression évalue à myvar code> si myvar code> est faux, et foo () code> si myvar code> est une vérité. Les extraits suivants sont presque identiques.

var x = (myvar && foo());

if(myvar){ var x = foo(); } else { var x = myvar; }


0 commentaires

3
votes

La fonction FOO () ne sera appelée que si Myvar n'est pas faux : ce qui signifie qu'il ne peut pas être faux, "", 0, null ou non défini. (Tout d'autres?)

Il est plus typique de voir un exemple comme celui-ci: xxx

Ceci est interprété comme suit ...

"si La variable "fenêtre" a un membre appelé "console" ... "

(il est important de préfixer" la console "avec" fenêtre ". Parce que si la console est indéfinie, vous obtenez une erreur JavaScript. Au lieu de faux.)

"... Invoquez la méthode" Journal "sur l'objet" Console "".


3 commentaires

"Des autres?" Just -0 et Nan, je pense.


@Jason: 0 , nan , une chaîne de longueur zéro, non défini , null et bien sûr faux sont FALSY ...


Ah, pensa à Nan comme je l'écrivais, mais j'ai oublié de le taper. Merci!



0
votes

Quand && sont évalués, la main gauche est évaluée d'abord i.e. myvar code>, s'il est vrai, seul le côté droit est évalué I.e. foo () code>. C'est parce que dans une déclaration A && B Si A est faux, l'expression A && B évaluera toujours à FALSE.

La déclaration ci-dessus est généralement utilisée de la manière suivante: p>

if myVar is truee x = foo(), else x = false


0 commentaires