mi sono imbattuto nel seguente rigaPunto interrogativo in JavaScript
hsb.s = max != 0 ? 255 * delta/max : 0;
Cosa l'?
e :
significa in questo contesto?
mi sono imbattuto nel seguente rigaPunto interrogativo in JavaScript
hsb.s = max != 0 ? 255 * delta/max : 0;
Cosa l'?
e :
significa in questo contesto?
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;
"?" 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 .... –
Ok, ok ... ora sto usando un pronome ambiguo, felice? :) – Greg
certo, un buon ternario l'operatore merita un altro ... –
? :
non è questo l'operatore ternario?
var x= expression ? true:false
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. –
correttamente tra parentesi per chiarezza, è
hsb.s = (max != 0) ? (255 * delta/max) : 0;
che significa ritorno sia
255*delta/max
se max! = 00
se max == 0Questo è 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:
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;
}
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"
"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
sembra essere evitando impostazione saturazione per 'Infinity' (causata da divisione per zero). –