Point d’interrogation et deux points en JavaScript

Je suis tombé sur la ligne suivante

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

Qu’est-ce que le ? et : signifie dans ce contexte?

Il s’appelle l’ opérateur conditionnel (qui est un opérateur ternaire ).

Il a la forme de: condition ? value-if-true : value-if-false
Pensez à la ? comme “alors” et : comme “sinon”.

Votre code est équivalent à

 if (max != 0) hsb.s = 255 * delta / max; else hsb.s = 0; 

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

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

sens retour non plus

  • 255*delta/max si max! = 0
  • 0 si max == 0

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

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

! = signifie pas égal

Donc, la forme longue de cette ligne serait

 if (max != 0) { //if max is not zero hsb.s = 255 * delta / max; } else { hsb.s = 0; } 

Ceci est probablement un peu plus clair quand il est écrit entre parenthèses comme suit:

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

Qu’est-ce qu’il fait est d’évaluer la partie dans les premières parenthèses. Si le résultat est vrai alors la partie après le? et avant le: est retourné. Si c’est faux, alors ce qui suit le: est retourné.

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

var x= expression ? true:false

Soyez prudent avec cela. Un -1 est évalué à true bien que -1! = True et -1! = False. Croyez-moi, je l’ai vu arriver.

alors

-1 ? “vrai côté”: “faux côté”

évalue à “vrai côté”