Punto interrogativo e due punti in JavaScript

Mi sono imbattuto nella seguente riga

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

Cosa fanno ? e : significa in questo contesto?

Si chiama Operatore Condizionale (che è un operatore ternario ).

Ha la forma di: condition ? value-if-true : value-if-false
Pensa a ? come “then” e : come “else”.

Il tuo codice è equivalente a

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

Correttamente tra parentesi per chiarezza, lo è

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

significato di ritorno o

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

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

? è un operatore ternario, funziona come un se in congiunzione con:

! = significa non uguale a

Quindi, la forma lunga di questa linea sarebbe

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

Questo è probabilmente un po ‘più chiaro se scritto tra parentesi come segue:

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

Quello che fa è valutare la parte nelle prime parentesi. Se il risultato è vero, allora la parte dopo? e prima del: viene restituito. Se è falso, viene restituito ciò che segue:

? : ? : non è questo l’operatore ternario?

var x= expression ? true:false

Stai attento con questo. A -1 è true, anche se -1! = True e -1! = False. Fidati di me, ho visto accadere.

così

-1? “lato vero”: “lato falso”

valuta il “lato vero”