Po pierwsze, wyrażenie trójskładnikowe nie jest zamiennikiem konstrukcji if / else - jest odpowiednikiem konstrukcji if / else, która zwraca wartość. Oznacza to, że klauzula if / else jest kodem, a wyrażenie trójskładnikowe jest wyrażeniem , co oznacza, że zwraca wartość.
Oznacza to kilka rzeczy:
- Używaj wyrażeń trójskładnikowych tylko wtedy, gdy po lewej stronie zmiennej,
=
której ma zostać przypisana wartość zwracana, znajduje się zmienna
- używaj wyrażeń trójskładnikowych tylko wtedy, gdy zwracana wartość ma być jedną z dwóch wartości (lub użyj wyrażeń zagnieżdżonych, jeśli pasuje)
- każda część wyrażenia (po? i after:) powinna zwracać wartość bez skutków ubocznych (wyrażenie
x = true
zwraca prawdę, ponieważ wszystkie wyrażenia zwracają ostatnią wartość, ale także zmienia x bez x, które mają wpływ na zwracaną wartość)
Krótko mówiąc - „prawidłowe” użycie wyrażenia trójskładnikowego to
var resultofexpression = conditionasboolean ? truepart: falsepart;
Zamiast przykładu condition ? x=true : null ;
, w którym używasz wyrażenia trójskładnikowego do ustawienia wartości x
, możesz użyć tego:
condition && (x = true);
Jest to nadal wyrażenie i dlatego może nie przejść walidacji, więc byłoby jeszcze lepsze podejście
void(condition && x = true);
Ostatni przejdzie walidację.
Ale z drugiej strony, jeśli oczekiwana wartość jest wartością logiczną, po prostu użyj wyniku samego wyrażenia warunku
var x = (condition); // var x = (foo == "bar");
AKTUALIZACJA
W odniesieniu do twojej próbki jest to prawdopodobnie bardziej odpowiednie:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
powinno być prawdopodobnie zapisane jakox = (condition ? true : null);
. Nawiasem mówiąc, w javascriptnull
ocenia się na false, więc w TYM przypadku możeszx = (condition);
i osiągnąć ten sam wynik.