Point d'interrogation et deux points en JavaScript

je suis tombé sur la ligne suivante

hsb.s = max != 0 ? 255 * delta / max : 0;

que signifient ? et : dans ce contexte?

204
demandé sur T.J. Crowder 2009-11-20 19:54:34

6 réponses

il est appelé opérateur conditionnel (qui est un opérateur ternaire ).

il a la forme de: condition ? value-if-true : value-if-false

Penser à la ? comme "alors" et : comme "autre".

votre code est équivalent à

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;
306
répondu Greg 2016-05-25 22:50:04

correctement mis entre parenthèses pour plus de clarté, il est

hsb.s = (max != 0) ? (255 * delta / max) : 0;

signifiant retour soit

  • 255*delta/max si max != 0
  • 0 si max = = 0
31
répondu Jason S 2009-11-20 16:57:35

tsl.S = max != 0 ? 255 * delta / max : 0;

? est un opérateur ternaire, il fonctionne comme un si en conjonction avec l' :

!= ne signifie pas

ainsi, la forme longue de cette ligne serait

if (max != 0) { //if max is not zero
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}
7
répondu CaffGeek 2009-11-20 16:58:52

ceci est probablement un peu plus clair lorsqu'il est écrit avec les crochets comme suit:

hsb.s = (max != 0) ? (255 * delta / max) : 0;

Ce qu'il fait est d'évaluer la partie dans la première crochets. Si le résultat est vrai, alors la partie après le ? et avant de le : est retourné. Si elle est fausse, alors ce qui suit : est retourné.

6
répondu Nikolas Stephan 2009-11-20 16:58:08

? : n'est-ce pas l'opérateur ternaire?

var x= expression ? true:false

1
répondu jldupont 2009-11-20 16:56:29

faites attention avec ça. Un -1 évalue à vrai bien que -1 != vrai et -1 != faux. Faites-moi confiance, je l'ai vu arriver.

donc

-1 ? "le vrai côté" : "false" côté

prend la valeur "vrai" côté

-3
répondu MEB 2017-02-15 17:07:31