2009-11-20 12 views
189

natknąłem się na następujący wierszZnak zapytania w JavaScript

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

Co wykonaj ? i : oznacza w tym kontekście?

+0

wygląda na uniknięcie ustawienie nasycenia do 'Infinity' (spowodowane przez dzielenie przez zero). –

Odpowiedz

287

Nazywa się Conditional Operator (co jest ternary operator). Jest to postać: condition? value-if-true: value-if-false Pomyśl o ? jako "wtedy" i : jako "else".

Twój kod jest równoważne

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

"?" nie jest operatorem trójskładnikowym; "?:" to operator trójskładnikowy. Rozmawiać o "?"jako operator trójskładnikowy jest jak rozmowa o Abbott bez Costello, Laurel bez Hardy, Cheech bez Chong ... –

+10

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

+5

z pewnością jeden dobry trójskładnik operator zasługuje na kolejne ... –

0

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

var x= expression ? true:false

+3

Jest to jeden z przykładów jego użycia, ale w rzeczywistości jest to krótsza wersja instrukcji, dla tych przypadków, w których chcesz po prostu PRAWDA/FAŁSZ: Jeśli "wyrażenie" było tylko pewną zmienną z liczbą lub łańcuchem, "var x =! ! expression "sprawi, że będzie to wynik boolowski. –

29

Prawidłowo nawiasach dla jasności, to

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

oznacza powrót albo

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

Jest to prawdopodobnie nieco jaśniejsze, gdy napisane ze wspornikami, co następuje:

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

Co robi jest ocenić udział w pierwszym nawiasie. Jeśli wynik jest prawdziwy, to część po? i przed: zwraca. Jeśli jest to fałsz, następuje powrót do:

7

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

? jest operatorem trójskładnikowych, to działa jak gdyby w połączeniu z:

= oznacza nie równa

Więc długa forma tej linii byłoby

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

Bądź ostrożny z tym. Wartość -1 jest równa true, chociaż -1! = True i -1! = False. Zaufaj mi, widziałem, jak to się stało.

czyli

-1? „Prawdziwy boku”: „false boku”

ma wartość „prawdziwy boku”

+1

"W JavaScript wartość ** truey ** jest wartością, która jest uważana za prawdziwe podczas oceny w kontekście logicznym. Wszystkie wartości są prawdziwe, chyba że są zdefiniowane jako falsy (tj. Z wyjątkiem wartości false, 0, "", null, undefined i NaN). Z tego powodu -1 jest oceniane jako prawdziwe. (Https: //developer.mozilla. org/en-US/docs/Glossary/Truthy) – jobmo

Powiązane problemy