2009-11-20 26 views
189

mi sono imbattuto nel seguente rigaPunto interrogativo in JavaScript

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

Cosa l'? e : significa in questo contesto?

+0

sembra essere evitando impostazione saturazione per 'Infinity' (causata da divisione per zero). –

risposta

287

Si chiama Conditional Operator (che è un ternary operator).

Ha la forma di: condition? value-if-true: value-if-false
Pensa allo ? come "then" e : come "else".

Il codice è equivalente al

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

"?" non è l'operatore ternario; "?:" è l'operatore ternario. Parlare di "?"come l'operatore ternario è come parlare di Abbott senza Costello, Laurel senza Hardy, Cheech senza Chong .... –

+10

Ok, ok ... ora sto usando un pronome ambiguo, felice? :) – Greg

+5

certo, un buon ternario l'operatore merita un altro ... –

0

? : non è questo l'operatore ternario?

var x= expression ? true:false

+3

Questo è un esempio del suo utilizzo, ma in realtà c'è una versione più breve della tua istruzione, per quei casi in cui vuoi VERO/FALSO: se "espressione" era solo una variabile con un numero o una stringa, "var x =! ! expression "lo trasformerà in un risultato booleano. –

29

correttamente tra parentesi per chiarezza, è

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

che significa ritorno sia

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

Questo è probabilmente un po 'più chiaro quando scritto con parentesi come segue:

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

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

7

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

? è un operatore ternario, funziona come un caso in collaborazione con la:!

= significa che non è uguale a

Così, la forma lunga di questa linea sarebbe

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

prestare attenzione a questo. A -1 è true, anche se -1! = True e -1! = False. Fidati di me, ho visto accadere.

so

-1? "True side": "lato false"

restituisce "true lato"

+1

"In JavaScript, un ** valore ** verità è un valore considerato vero quando valutato in un contesto booleano. Tutti i valori sono verità a meno che non siano definiti come falsi (cioè, ad eccezione di false, 0, "", null, indefinito e NaN). "Questo è il motivo per cui -1 viene valutato come vero. (Https: //developer.mozilla. org/it-IT/docs/Glossario/Truthy) – jobmo