web-dev-qa-db-fra.com

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 les ? et : dans ce contexte?

218
Inaimathi

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
Considérez le ? comme "alors" et le : comme "else".

Votre code est équivalent à

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

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

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

sens retour soit

  • 255*delta/max si max! = 0
  • 0 si max == 0
34
Jason S

Ceci est probablement un peu plus clair lorsque vous écrivez entre parenthèses comme suit:

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

Ce qu'il fait est d'é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é. Si c'est faux, alors ce qui suit le: est retourné.

7
Nikolas Stephan

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

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

! = 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;
}
7
CaffGeek

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

var x= expression ? true:false

1
jldupont

?: est une condition à court terme pour les problèmes else {} et if(){} . Votre code est donc interchangeable avec ceci:

if(max != 0){
       hsb.s = 225 * delta / max
}
else {
       hsb.s = 0
}

MDN - Opérateur conditionnel (ternaire)

0