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?
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?
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;
"?" 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 ... –
Ok, ok ... teraz używam zaimka wieloznacznego, szczęśliwy? :) – Greg
z pewnością jeden dobry trójskładnik operator zasługuje na kolejne ... –
? :
czy to nie jest operator trójskładnikowy?
var x= expression ? true:false
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. –
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! = 00
jeśli max == 0Jest 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:
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;
}
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”
"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
wygląda na uniknięcie ustawienie nasycenia do 'Infinity' (spowodowane przez dzielenie przez zero). –