Prima di tutto, l'espressione ternaria non è un sostituto per un if/else costrutto - la sua un equivalente ad un if/else costrutto che restituisce un valore. Cioè, una clausola if/else è codice, un'espressione ternaria è un'espressione , che significa che restituisce un valore.
significa diverse cose:
- usano espressioni ternari solo quando si dispone di una variabile sul lato sinistro del
=
che deve essere assegnato il valore di ritorno
- solo utilizzare le espressioni ternari quando il valore restituito deve essere uno dei due valori (o utilizzare espressioni nidificate se è appropriato)
- ogni parte dell'espressione (dopo? e dopo:) deve restituire un valore senza effetti collaterali (l'espressione
x = true
restituisce true come tutte le espressioni restituiscono il valore ultimo valore, ma cambia anche x senza tx avendo alcun effetto sul valore restituito)
In breve - l'uso 'corretta' di un'espressione ternario è
var resultofexpression = conditionasboolean ? truepart: falsepart;
Invece di vostro esempio condition ? x=true : null ;
, in cui si utilizza l'espressione ternaria per impostare il valore della x
, è possibile utilizzare questo:
condition && (x = true);
questo è ancora un'espressione e potrebbe quindi non passa la convalida, quindi un approccio ancora migliore sarebbe
void(condition && x = true);
L'ultimo passerà la convalida.
Ma poi di nuovo, se il valore previsto è un valore booleano, basta utilizzare il risultato della condizione espressione stessa
var x = (condition); // var x = (foo == "bar");
UPDATE In relazione a vostro campione questo è probabilmente più appropriato:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
fonte
2010-05-29 02:08:28
uso di una condizione simile a ternario?x = true: null; 'dovrebbe probabilmente essere scritto come' x = (condizione? true: null); '. Per inciso, in javascript 'null' restituisce false, quindi in questo caso potresti' x = (condition); 'e ottieni lo stesso risultato. –
matt, la tua risposta è la migliore, ma non è una risposta, è un commento! – Cheeso
Matt, il mio codice ACTUAL è:! Defaults.slideshowWidth? defaults.slideshowWidth = obj.find ('img'). width() + 'px': null; un modo più breve e migliore per scriverlo? –