Znak zapytania i dwukropek w JavaScript


Odpowiedzi:


363

Nazywa się to Operatorem Warunkowym (który jest operatorem potrójnym ).

Ma postać condition:? value-if-true: value-if-false
Pomyśl o tym ?jako „wtedy” i :jako „innym”.

Twój kod jest równoważny z

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

27
„?” nie jest operatorem trójskładnikowym; „?:” jest operatorem trójskładnikowym. Rozmawiać o "?" ponieważ operator trójskładnikowy mówi jak Abbott bez Costello, Laurel bez Hardy'ego, Cheech bez Chonga ...
Jason S

11
Ok, ok ... teraz używam niejednoznacznego zaimka, szczęśliwy? :)
Greg,

14
Mówiąc pedantycznie, jest to trójskładnikowy operator, który okazuje się być jedynym w większości języków programowania. Każdy operator działający na 3 częściach jest operatorem potrójnym, podobnie jak additionoperator binarny, który działa na poprzedzających i następujących wyrażeniach (np. 1 + 2 plus działa na 1 i 2), lub negacja jest operatorem jednoargumentowym (np. -X gdzie wartość x jest zanegowana).
Davy8

6
@ Davy8: A ten można nazwać operatorem warunkowym, aby być konkretnym.
Ślimak mechaniczny

Co jeśli chcesz sprawdzić dwa warunki?
Thanos Dodd

38

Właściwie jest nawiasowany dla jasności

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

co oznacza zwrot albo

  • 255*delta/max jeśli max! = 0
  • 0 jeśli max == 0

7

Jest to prawdopodobnie nieco jaśniejsze, gdy zapisuje się w nawiasach w następujący sposób:

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

Dokonuje oceny części w pierwszych nawiasach. Jeśli wynik jest prawdziwy, to część po? i zanim: zostanie zwrócony. Jeśli jest to fałsz, zwracane jest to, co następuje:.


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

?jest operatorem trójskładnikowym. Działa jak ifw połączeniu z:

!= znaczy nie równa się

Tak więc długa forma tej linii byłaby

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

1

? : czy to nie jest trójskładnikowy operator?

var x= expression ? true:false


3
Jest to jeden z przykładów jego użycia, ale w rzeczywistości istnieje krótsza wersja twojego oświadczenia, dla tych przypadków, w których chcesz tylko PRAWDA / FAŁSZ: Jeśli „wyrażenie” było tylko jakąś zmienną z liczbą lub łańcuchem, „var x = !! wyrażenie ”zamieni go w wynik boolowski.
Scott Lahteine


-3

Uważaj na to. A -1 ma wartość prawda, chociaż -1! = Prawda, a -1! = Fałsz. Zaufaj mi, widziałem, jak to się dzieje.

więc

-1? „true side”: „false side”

ocenia na „prawdziwą stronę”


3
„W JavaScript, wartość prawdy jest wartością, która jest uważana za prawdziwą, gdy jest oceniana w kontekście boolowskim. Wszystkie wartości są prawdziwe, chyba że są zdefiniowane jako fałsz (tj. Z wyjątkiem fałszu, 0,” ”, null, niezdefiniowana i NaN) . ” Dlatego -1 jest oceniane jako prawda. ( developer.mozilla.org/en-US/docs/Glossary/Truthy )
jobmo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.