Punto interrogativo e due punti in JavaScript


Risposte:


363

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

Ha la forma di condition:? value-if-true: value-if-false
Pensa a ?come "allora" e :come "altro".

Il tuo codice è equivalente a

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

27
"?" non è l'operatore ternario; "?:" è l'operatore ternario. Parlare di "?" visto che l'operatore ternario è come parlare di Abbott senza Costello, Laurel senza Hardy, Cheech senza Chong ....
Jason S

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

14
Per essere pedante, è un operatore ternario, che sembra essere l'unico nella maggior parte dei linguaggi di programmazione. Qualsiasi operatore che lavora su 3 parti è un operatore ternario, proprio come additionun operatore binario che opera sulle espressioni precedenti e seguenti (es. 1 + 2 il segno positivo opera su 1 e 2), oppure la negazione è un operatore unario (es. -X dove il valore di x è negato).
Davy8,

6
@ Davy8: E questo può essere chiamato l' operatore condizionale per essere specifico.
Lumaca meccanica

E se volessi verificare due condizioni?
Thanos Dodd,

38

Lo è correttamente tra parentesi per chiarezza

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

che significa ritorno

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

7

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

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

Ciò che fa è valutare la parte tra le prime parentesi. Se il risultato è vero, la parte dopo il? e prima che: venga restituito. Se è falso, viene restituito quanto segue:


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

?è un operatore ternario. Funziona come un ifinsieme a:

!= significa non uguale

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

1

? : non è questo l'operatore ternario?

var x= expression ? true:false


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


-3

Stai attento con questo. A -1 viene considerato vero sebbene -1! = Vero e -1! = Falso. Fidati di me, l'ho visto accadere.

così

-1? "lato vero": "lato falso"

valuta "lato vero"


3
"In JavaScript, un valore di verità è un valore che è considerato vero quando valutato in un contesto booleano. Tutti i valori sono veritieri a meno che non siano definiti come falsi (ovvero, tranne per false, 0," ", null, non definito e NaN) ". Questo è il motivo per cui -1 viene valutato come vero. ( developer.mozilla.org/en-US/docs/Glossary/Truthy )
jobmo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.