(myVar && foo())
Que signifie le code ci-dessus? À quoi cela équivaut-il?Que signifie (myVar && foo()) en JavaScript?
Je pense qu'il fonctionne sur une seule ligne.
(myVar && foo())
Que signifie le code ci-dessus? À quoi cela équivaut-il?Que signifie (myVar && foo()) en JavaScript?
Je pense qu'il fonctionne sur une seule ligne.
L'expression est évaluée à myvar
myvar
si est Falsey et foo()
si myvar
est truthy. Les extraits suivants sont presque identiques.
var x = (myvar && foo());
if(myvar){ var x = foo(); } else { var x = myvar; }
c'est une expression qui équivaut à "si myVar n'est pas falsey, exécutez la fonction foo()". S'il est utilisé comme ceci: var x = (myVar && foo())
, le résultat sera:
si myVar n'est pas falsey, x sera mis à la sortie de foo(). Si myVar est Falsey, x sera défini sur myVar.
L'expression fait une utilisation intelligente du court-circuit dans les expressions booléennes. foo() ne s'exécutera que si myVar est évalué à true
.
if (myVar) {
foo();
}
est beaucoup plus clair. Il y a probablement des cas où ce genre de code a du sens, mais les vérificateurs de style (si vous êtes intéressés par ce genre de chose) vont vous mettre dessus. Voir http://javascript.crockford.com/code.html. C'est une bonne pratique d'éviter de se fier aux instructions d'insertion et d'expression par points-virgules.
edit: Notez que var x = a && b();
n'est probablement pas une si mauvaise idée dans certains contextes. Cependant, (a && b())
en soi est erronée de plusieurs façons. (Insertion de point-virgule, un état d'expression, en plus d'être sémantiquement cryptique)
je l'ai vu sur un script jquery (dialogue ui) ... – Val
"Exploitant" "stupide" ce sont des mots forts :) Si vous utilisez souvent JS, il est logique et clair comme il se présente. –
Il y a certainement des circonstances où un tel code n'est pas stupide par une mesure raisonnable. Comme dans le contexte de 'if (enabled && isVisible()) ...' ou une telle situation. – Grumdrig
La fonction foo() ne sera appelée que si myVar ne Falsey: ce qui signifie qu'il ne peut pas être faux "", 0, null, ou non définie. (Tous les autres)?
Il est plus typique pour voir un exemple comme celui-ci:
window.console && console.log("some helpful debug info");
Cela est interprété comme suit ...
« Si la variable « fenêtre » a un membre appelé ' console » ... "
(Il est important de préfixe 'console' par 'fenêtre.' parce que, si la console est définie, vous obtenez une erreur JavaScript au lieu de faux.)
" ... dans voke la méthode 'log' sur l'objet 'console'. "
* "D'autres?" * Juste -0 et NaN, je pense. –
@Jason: '0',' NaN', une chaîne de longueur nulle, 'undefined',' null' et bien sûr 'false' sont des * falsy * ... – CMS
Ah, j'ai pensé à NaN pendant que j'écrivais, mais oublié de le taper. Merci! –
lorsque & & sont évalués de la main gauche est évaluée en premier à savoir myVar
, si cela est vrai, alors que le côté droit est évalué à savoir foo()
. En effet, dans une instruction A & & B si A est faux, alors l'expression A & & B sera toujours évaluée comme fausse.
La déclaration ci-dessus est habituellement utilisé de la manière suivante:
var x = myVar && foo();
cela peut aussi être écrit:
if myVar is truee x = foo(), else x = false
Si myvar est truthy x est pas défini le vrai, son jeu à la valeur de foo(), quel qu'il soit. – brad
Ce n'est pas tout à fait exact. Si myVar vaut 0, alors x est mis à 0, pas faux. –
Vous avez tous les deux raison. Réponse modifiée. – glomad