2010-12-02 5 views

Répondre

1

Généralement, if est une instruction (par exemple, vous ne pouvez pas l'affecter à une variable) et l'opérateur ternaire ?: fait partie d'une expression (donne une valeur qui peut être affectée à des variables).

En outre, le bloc if peut contenir des instructions alors que les composants de ?: peuvent uniquement contenir des expressions.

Dans l'exemple que vous donnez, il n'y a pas de différence, puisque vous n'utilisez pas le résultat du ?:. Les deux extraits n'évaluent foo() que si x est une valeur vraie.

8

Snippet # 2 est une expression ECMAScript invalide car il n'a pas la : blah nécessaire pour en faire un ternaire.

EDIT: Il n'y a pas vraiment une différence entre les deux extraits, ils ont tous deux foo si x invoquent est truthy. Si x est une falsification (undefined/false/empty string/0 /) alors le premier extrait n'évaluera rien, le dernier snippet évaluera 0 mais 0 n'a vraiment aucun impact sur le script.

+0

En outre, la syntaxe du bloc n'évalue à aucune valeur (Ce n'est pas une expression). L'opérateur ternaire évalue à une valeur. – cdhowie

+0

@meder J'ai mis à jour la question ... –

+0

@cdhowie Oui, mais l'expression ternaire n'est affectée à rien dans mon code, donc ce n'est pas une différence dans ce cas. –

3

Je pense que vous vouliez poser la question suivante

// Why should I use 
if (x) { 
    do(); 
} 

// instead of 
x && do(); 

ou

// Why should I use 
if (x) { 
    do(); 
} else { 
    dont(); 
} 

//instead of 
x ? do() : dont() 

Comme ils sont écrits, il n'y a pas de différence dans la sortie. Je n'aime pas utiliser le ternaire ou l'opérateur & & dans ces cas en raison de la sémantique de l'utilisation du ternaire et & &. Un ternaire renvoie une valeur que vous n'utilisez pas, tout comme l'expression & &. Par conséquent, je préférerais utiliser la façon dont la langue a l'intention d'être utilisée par les opérateurs.

Cependant, j'aime utiliser & & pour les chèques null

var val = obj && obj.getValue(); 

Notez que dans ce cas, nous utilisons la valeur de retour de l'expression

+1

+1 J'aime cette technique: 'x && foo();' au lieu de 'if (x) {foo(); } '. Je m'en souviendrai. :) –

+0

Bien sûr ... même si c'était mon anti-suggestion. J'avais l'habitude de l'utiliser, mais j'ai été convaincu par d'autres développeurs de ne pas le faire. –

+0

Peu importe, c'est bon à savoir à ce sujet. –

Questions connexes