Point d'interrogation et deux points en JavaScript


Réponses:


363

Il est appelé l' opérateur conditionnel (qui est un opérateur ternaire ).

Il a la forme de condition:? value-if-true: value-if-false
Considérez le ?comme «alors» et :comme «autre».

Votre code est équivalent à

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

27
"?" n'est pas l'opérateur ternaire; "?:" est l'opérateur ternaire. Parler de "?" comme l'opérateur ternaire, c'est comme parler d'Abbott sans Costello, de Laurel sans Hardy, de Cheech sans Chong ....
Jason S

11
Ok, ok ... maintenant j'utilise un pronom ambigu, heureux? :)
Greg

14
Pour être pédant, c'est un opérateur ternaire, qui se trouve être le seul dans la plupart des langages de programmation. Tout opérateur qui fonctionne sur 3 parties est un opérateur ternaire, tout comme additionun opérateur binaire qui opère sur les expressions précédentes et suivantes (par exemple 1 + 2, le plus fonctionne sur 1 et 2), ou la négation est un opérateur unaire (par exemple -x où la valeur de x est annulée).
Davy8

6
@ Davy8: Et celui-ci peut être appelé l' opérateur conditionnel pour être spécifique.
Escargot mécanique

Et si vous vouliez vérifier deux conditions?
Thanos Dodd

38

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

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

ce qui signifie retourner soit

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

7

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

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

Ce qu'il fait, c'est évaluer la pièce dans les premières parenthèses. Si le résultat est vrai, la partie après le? et avant le: est retourné. S'il est faux, ce qui suit le: est retourné.


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

?est un opérateur ternaire. Cela fonctionne comme un ifen conjonction avec le:

!= signifie pas égal

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;
}

1

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

var x= expression ? true:false


3
C'est un exemple de son utilisation, mais il y a en fait une version plus courte de votre instruction, pour les cas où vous voulez juste TRUE / FALSE: Si 'expression' était juste une variable avec un nombre ou une chaîne, "var x = !! expression "en fera un résultat booléen.
Scott Lahteine


-3

Soyez prudent avec cela. Un -1 est évalué comme vrai bien que -1! = Vrai et -1! = Faux. Croyez-moi, je l'ai vu arriver.

alors

-1 ? "vrai côté": "faux côté"

évalue le "vrai côté"


3
"En JavaScript, une valeur véridique est une valeur qui est considérée comme vraie lorsqu'elle est évaluée dans un contexte booléen. Toutes les valeurs sont véridiques, sauf si elles sont définies comme fausses (c'est-à-dire, à l'exception de false, 0," ", null, undefined et NaN) . " C'est pourquoi -1 est évalué comme vrai. ( developer.mozilla.org/en-US/docs/Glossary/Truthy )
jobmo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.