(myVar && foo()) What does the above code mean? What is it equivalent to?I think it runs on a single line.
5 Réponses :
C'est une expression qui équivaut à "si myvar n'est pas fausse, exécutez la fonction foo ()".
Si c'est utilisé comme ceci: 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. P> var x = (myvar && foo ()) code>, le résultat sera: p>
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.
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();
}
"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 ()) ... code> 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) code> vraiment mieux que
si (x && y ()) code>?
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 () code> idiome beaucoup. Et oui, à mon avis, c'est une mauvaise pratique.
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; }
La fonction FOO () ne sera appelée que si Myvar n'est pas faux em>: 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: p> Ceci est interprété comme suit ... p> "si La variable "fenêtre" a un membre appelé "console" ... " p> (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.) p> "... Invoquez la méthode" Journal "sur l'objet" Console "". P> P>
"Des autres?" I> Just -0 et Nan, je pense.
@Jason: 0 code>,
nan code>, une chaîne de longueur zéro,
non défini code>,
null code> et bien sûr
faux code> sont FALSY I> ...
Ah, pensa à Nan comme je l'écrivais, mais j'ai oublié de le taper. Merci!
Quand && sont évalués, la main gauche est évaluée d'abord i.e. La déclaration ci-dessus est généralement utilisée de la manière suivante: p> 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.
if myVar is truee x = foo(), else x = false