Tout d'abord, une expression ternaire ne remplace pas une construction if / else - c'est un équivalent à une construction if / else qui renvoie une valeur. Autrement dit, une clause if / else est du code, une expression ternaire est une expression , ce qui signifie qu'elle renvoie une valeur.
Cela signifie plusieurs choses:
- utilisez des expressions ternaires uniquement lorsque vous avez une variable sur le côté gauche de la
=
valeur de retour
- utiliser uniquement des expressions ternaires lorsque la valeur renvoyée doit être l'une des deux valeurs (ou utiliser des expressions imbriquées si cela convient)
- chaque partie de l'expression (après? et après:) doit renvoyer une valeur sans effets secondaires (l'expression
x = true
renvoie true car toutes les expressions renvoient la dernière valeur, mais change également x sans que x n'ait d'effet sur la valeur renvoyée)
En bref - l'utilisation `` correcte '' d'une expression ternaire est
var resultofexpression = conditionasboolean ? truepart: falsepart;
Au lieu de votre exemple condition ? x=true : null ;
, où vous utilisez une expression ternaire pour définir la valeur de x
, vous pouvez utiliser ceci:
condition && (x = true);
Ceci est toujours une expression et peut donc ne pas passer la validation, donc une approche encore meilleure serait
void(condition && x = true);
Le dernier passera la validation.
Mais là encore, si la valeur attendue est un booléen, utilisez simplement le résultat de l'expression de condition elle-même
var x = (condition); // var x = (foo == "bar");
MISE
À JOUR En ce qui concerne votre échantillon, c'est probablement plus approprié:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
devrait probablement s'écrirex = (condition ? true : null);
. Ennull
passant , en javascript est évalué à faux, donc dans CE cas, vous pouvezx = (condition);
et obtenir le même résultat.