2010-07-02 19 views
11
the_styles ? the_styles.appendTo('head'); the_styles=null : the_styles = $('.stylesheet').detach(); 

Ovviamente, questo non è valido. Notare il ";" tra appendTo() e the_styles=null. Come lo scrivo su 1 riga e ho ancora più espressioni del genere?Operatore ternario in JavaScript con più espressioni?

+0

Solo un consiglio: l'operatore ternario in alcuni altri linguaggi non viene utilizzato per scrivere istruzioni complete, ma solo la parte dell'espressione (cioè la parte destra del segno '='). In Java questo non riuscirebbe a compilare in primo luogo. È meglio non prendere l'abitudine da questo. – FK82

risposta

19

Utilizzare l'operatore virgola in questo modo:

the_styles ? (the_styles.appendTo('head'), the_styles=null) : the_styles = $('.stylesheet').detach(); 

Ecco ciò che il Mozilla Developer Center scrive l'operatore virgola:

È possibile utilizzare l'operatore virgola quando si desidera includere più espressioni in una posizione che richiede una singola espressione. L'uso più comune di questo operatore è di fornire più parametri in un ciclo for.

Read more here: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/Comma_Operator

+0

Questa è una forma davvero accurata, inoltre non mi aspettavo che le parentesi cambiassero così profondamente il significato della frase.Non penso che lo scriverei neanche accidentalmente, ma confronti 'var x = 1, y = 2, z = 3;' e 'var x = (1, y = 2, z = 3);'. Nel primo caso, 'x' è impostato su' 1'. Nel secondo caso, 'x' è impostato su' 3'. Questo è davvero, davvero pulito. – Andrew

2
the_styles ? (function() {the_styles.appendTo('head'); the_styles=null})() : <etc> 

Basta avvolgere il blocco di codice in (function() { e })().

Ora per la parte difficile: perché vuoi fare questo? Forse c'è una soluzione migliore!

+1

sì, questo è brutto, non importa. Mi piacciono le ternarie perché sono pulite e una sola linea è tutto. –

+0

Finché il codice in ogni ramo è una singola "linea" sono belli. Altrimenti ... usa più linee! – mcherm

1

Sono d'accordo con glowcoder, ma se si vuole ancora che:

the_styles ? function(){ the_styles.appendTo('head'); the_styles=null;}() : the_styles = $('.stylesheet').detach(); 
+0

Sì, lo faccio anche io ora, grazie! –

0
the_styles ? the_styles.appendTo('head') : the_styles = $('.stylesheet').detach(); 

non dovete a null se il tuo sovrascrittura!

+0

Ho bisogno del null perché altrimenti, mantiene lo stesso valore dopo il clic iniziale e ho bisogno di una funzione "off/on". –

0
the_styles=the_styles || $('.stylesheet').detach(); the_styles.appendTo('head'); 
+0

Non funziona ... :( –

8

Chi ha bisogno l'operatore ternario?

​the_styles = !the_styles && $('.stylesheet').detach()​​​​ || 
      the_styles.appendTo('head') && null;​ 

dovuto cambiare le espressioni intorno altrimenti il ​​valore null della prima espressione sarà sempre forzare la seconda espressione .detach() da valutare.

L'unica cosa che riguarda il codice intelligente è che una volta tornato dopo una pausa caffè, non avrà alcun senso nemmeno per te. Quindi questo è molto meglio:

if(the_styles) { 
    the_styles.appendTo('head') 
    the_styles = null; 
} 
else { 
    the_styles = the_styles.detach('.stylesheet'); 
} 

Per me, anche la versione semplicistica di cui sopra non ha alcun senso. Il la parte è ovvia, ma perché lo fa?

+0

+1 - Ho avuto una risposta simile, ma ho letto male l'intenzione. Il tuo è giusto. – user113716

+1

@patrick - Mi ci è voluto un po 'per valutare il cortocircuito che è sempre un segnale urlante per non provare ad essere intelligente :) – Anurag