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

Obviamente, esto no es válido. Observe la ";" entre appendTo() y the_styles=null. ¿Cómo lo escribo en 1 línea y todavía tengo varias expresiones como esa?Ternary Operator en JavaScript con múltiples expresiones?

+0

Solo un consejo: el operador ternario en algunos otros idiomas no se usa para escribir declaraciones completas, sino solo la parte de expresión (es decir, la parte derecha del signo '='). En Java esto no compilaría en primer lugar. Es mejor no hacer un hábito de esto. – FK82

Respuesta

19

Utilice el operador coma de esta manera:

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

Esto es lo que el Centro de desarrolladores de Mozilla escribe sobre el operador coma:

Usted puede utilizar el operador coma cuando se desea incluir expresiones múltiples en una ubicación que requiere una única expresión. El uso más común de este operador es proporcionar múltiples parámetros en un bucle for.

leer más aquí: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/Comma_Operator

+0

Esa es una forma realmente ordenada. Tampoco esperaba que los frenos modificaran tan profundamente el significado de la declaración.No creo que escriba esto incluso por accidente, pero compare 'var x = 1, y = 2, z = 3;' y 'var x = (1, y = 2, z = 3);'. En el primer caso, 'x' se establece en' 1'. En el segundo caso, 'x' se establece en' 3'. Eso es realmente, realmente bueno. – Andrew

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

Sólo situar el bloque de código en (function() { y })().

Ahora la parte difícil: ¿por qué quieres hacer esto? Tal vez hay una mejor solución!

+1

sí, eso es feo, no importa. Solo me gustan los ternarios porque están limpios y una sola línea es todo. –

+0

Siempre que el código en cada rama sea una sola "línea", son agradables. De lo contrario ... ¡usa múltiples líneas! – mcherm

1

Estoy de acuerdo con glowcoder pero si todavía lo quieren:

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

Sí, ahora también, ¡gracias! –

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

usted no necesita a nulo si su sobreescribiéndolo!

+0

Necesito el valor nulo porque si no, conserva el mismo valor después del clic inicial y necesito una función "activar/desactivar". –

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

No funciona ... :( –

8

¿Quién necesita el operador ternario?

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

tuvo que cambiar las expresiones alrededor de lo contrario, el valor null de la primera expresión siempre forzar la segunda expresión .detach() para ser evaluados.

Lo único que tiene que ver con el código inteligente es que una vez que vuelves a él después de un descanso para tomar café, no tendrá ningún sentido ni siquiera para ti. Así que esto es mucho mejor:

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

Para mí, incluso la versión simplista anterior no tiene ningún sentido. La parte que es obvia, pero ¿por qué está haciendo eso?

+0

+1 - Tuve una respuesta similar, pero malinterpreté la intención. El tuyo tiene razón – user113716

+1

@patrick - Me tomó un tiempo evaluar el cortocircuito que siempre es una señal de gritos para no intentar ser inteligente :) – Anurag

Cuestiones relacionadas