2011-07-26 14 views
12

He encontrado desconocido la construcción de código en el sitio de JQuery. Después de algún formateo se ve así:¿Qué sintaxis extraña?

function (a,c) { 
    c==null && (c=a,a=null); 
    return arguments.length>0 
     ? this.bind(b,a,c) 
     : this.trigger(b) 
} 

¿Qué significa la primera línea de la función? ¿Es un truco o una construcción de código JS estándar?

+5

Es un estándar en Java, PHP, JavaScript y sobre cualquier otro idioma – Tom

+0

Si vas a mirar el código jQuery, mirar la copia desarrollo y no el minificado. ** [Aquí hay un enlace] (http://code.jquery.com/jquery-1.6.2.js) ** a la copia de desarrollo. – qwertymk

+1

@Tom: el [operador de coma] (http://ecma262-5.com/ELS5_HTML.htm#Section_11.14) es diferente en JavaScript que en otros idiomas con una sintaxis inspirada en C. – dolmen

Respuesta

15

Es un truco que usa la evaluación booleana de cortocircuito para solo hacer la segunda mitad si la primera se evalúa como verdadera. Perl tiene esto comúnmente:

<something> or die 

donde si la primera declaración falló, el programa termina.

leerlo como

if (c == null) { c = a; a = null; } 
+1

¿Pero por qué coma? 'c = a, a = null' –

+2

La coma hace que ambos comandos se ejecuten sin necesidad de un punto y coma. –

+2

, que a su vez permite que * both * sentencias se ejecuten en ** una sola línea **, que es un ahorro de carácter sobre un if-statement. – zzzzBov

12

Esa es una manera fea de escribir

if(c==null) { 
    c = a; 
    a = null; 
} 

Este utiliza el hecho de que la segunda parte de booleano && se ejecutará si, y sólo si la primera parte evalúa a verdadero.

+1

Muy feo. Y muy poco intuitivo para muchos desarrolladores. Puedes encontrar a la persona que lo escribió y patearlos. –

+10

@Schroedingers Cat: como las variables se llaman 'a',' b', 'c' probablemente este código haya sido generado por un minificador de código. [jQuery parece actualmente] (https://github.com/jquery/jquery/blob/master/Makefile#L8) usar [UglifyJS] (https://github.com/mishoo/UglifyJS). – dolmen

+1

Uglify? Eso explica mucho, ¿no? ;RE – Mchl

2

La expresión utiliza dos características de JavaScript:

Como resultado de la expresión es equivalente a:

if (c == null) { 
    c = a 
    a = null 
} 
Cuestiones relacionadas