Prima di tutto, un'espressione ternaria non sostituisce un costrutto if / else, è equivalente a un costrutto if / else che restituisce un valore. Cioè, una clausola if / else è codice, un'espressione ternaria è un'espressione , nel senso che restituisce un valore.
Ciò significa diverse cose:
- usa espressioni ternarie solo quando hai una variabile sul lato sinistro a
=
cui deve essere assegnato il valore di ritorno
- utilizzare le espressioni ternarie solo quando il valore restituito deve essere uno dei due valori (oppure utilizzare espressioni nidificate se è appropriato)
- ogni parte dell'espressione (dopo? e dopo:) dovrebbe restituire un valore senza effetti collaterali (l'espressione
x = true
restituisce vero in quanto tutte le espressioni restituiscono l'ultimo valore, ma cambia anche x senza che x abbia alcun effetto sul valore restituito)
In breve: l'uso "corretto" di un'espressione ternaria è
var resultofexpression = conditionasboolean ? truepart: falsepart;
Invece del tuo esempio condition ? x=true : null ;
, in cui usi un'espressione ternaria per impostare il valore di x
, puoi usare questo:
condition && (x = true);
Questa è ancora un'espressione e potrebbe quindi non superare la convalida, quindi sarebbe un approccio ancora migliore
void(condition && x = true);
L'ultimo passerà la convalida.
Ma poi di nuovo, se il valore atteso è un valore booleano, basta usare il risultato dell'espressione condizione stessa
var x = (condition); // var x = (foo == "bar");
AGGIORNAMENTO
In relazione al tuo campione questo è probabilmente più appropriato:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
dovrebbe probabilmente essere scritto comex = (condition ? true : null);
. A parte questo, in javascript sinull
valuta falso, quindi in questo caso è possibilex = (condition);
e ottenere lo stesso risultato.