2011-02-19 7 views
27

vi esta línea en el código fuente jQuery.form.js:¿Usando el && 's cortocircuito como una declaración if?

g && $.event.trigger("ajaxComplete", [xhr, s]); 

Mi primer pensamiento fue wtf ??

Mi siguiente pensamiento fue, no puedo decidir si eso es feo o elegante.

No soy un gurú de Javascript de ninguna manera, por lo que mi pregunta es doble. Primero quiero confirmar que lo entiendo correctamente. Es la línea anterior equivalente a:

if (g) { 
    $.event.trigger("ajaxComplete", [xhr, s]); 
} 

Y en segundo lugar, ¿es esta práctica común/aceptada en Javascript? Por un lado, es sucinto, pero por otro puede ser un poco críptico si no lo has visto antes.

+0

Teniendo en cuenta que esos apoyos ni siquiera son necesarios en el segundo caso, votaría claro y desagradable, aunque tampoco soy un gurú de JavaScript. – cst1992

Respuesta

17

Sí, los dos ejemplos son equivalentes. Funciona así en casi todos los idiomas, pero se ha vuelto bastante idiomático en Javascript. Personalmente, creo que es bueno en algunas situaciones, pero puede ser abusado en otras. Sin embargo, es definitivamente más corto, lo que puede ser importante para minimizar los tiempos de carga de Javascript.

Véase también Can somebody explain how John Resig's pretty.js JavaScript works?

+0

No hay cortocircuitos en VBA, que aprendí de la peor manera después de 4 horas de depuración. –

+0

He intentado hacer un cortocircuito como este con Java y parece que el lenguaje no lo permite. ¿Estoy en lo correcto? – MaxG

+2

@DarylBennett there is --- "AndAlso" and "OrElse". Diría que me maten ahora, pero no tener pulso ya es un requisito previo para programar VB. – hraban

2

Sí, lo entiende (en ese contexto); sí, es una práctica estándar en JavaScript.

+0

Ciertamente no es una práctica estándar en C#. De hecho, ni siquiera compilará "Solo asignación, llamada, incremento, decremento y nuevas expresiones de objeto se pueden usar como una declaración" – Davy8

+0

Y eso solo si la segunda mitad devuelve 'bool' de lo contrario, se obtiene" && operator no se puede aplicar Para los argumentos de tipo 'bool' y '[cualquiera que sea el tipo de la segunda mitad regresa]' " – Davy8

+0

debe ponerlo entre paréntesis y asignarlo. Solo para ti, eliminaré el bit sobre C# porque la pregunta es específicamente sobre JavaScript. – CarneyCode

2

Sí, es equivalente a if como usted escribió. Ciertamente no es una práctica poco común. Si se acepta depende de quién está (o no) aceptando ...

10

Es normal, pero tampoco ni JSLintJSHint semejante:

esperado una llamada de la tarea o función y en su lugar vio una expresión.

6

Usted debe tener cuidado porque este cortocircuito se puede omitir si hay un || en condicional:

false && true || true 
> true 

Para evitar esto, asegúrese de grupo de los condicionales:

false && (true || true) 
> false 
+3

Eso es porque los AND tienen prioridad sobre las RUP cuando están uno al lado del otro. La situación matemática equivalente sería '2 * 3 + 2 = 8' cuando' 2 * (3 + 2) = 10'. Esto es demasiado fácil de perder ... – Alex

Cuestiones relacionadas