2012-03-13 13 views
7

Dada la siguienteJSLint preverse {

for(var i=0; i< data.cats.length; i++) list += buildCategories(data.cats[i]); 

JSLint me dice

Expected '{' and instead saw 'list'. 

¿Hay una desventaja real para el uso de la notación más corta en lugar de envolverlo TI llaves?

+0

si está seguro de que no desea esa verificación, simplemente cambie la configuración de sugerencias suministrando '" rizado ": falso,' –

Respuesta

14

Es una programación defensiva: el uso de corchetes define claramente qué afirmaciones están destinadas a asociarse con el for.

Si no utiliza llaves, en un momento posterior alguien podría agregar erróneamente otra declaración debajo de list += buildCategories... esperando que se ejecute también con el bucle for.

+9

No estoy de acuerdo con todas las reglas de estilo de Crockford, pero estoy 100% Con este. – Alnitak

+1

Esto es molesto para mí porque uso for-if. 'for (var k in obj) if (obj.hasOwnProperty (k)) {...}' (o con otros filtros) es muy, muy útil, pero el patrón plantea esta advertencia. Creo que esto es tan legítimo como 'else if' (de lo contrario requeriría llaves) –

+0

Estoy depurando varios miles de líneas del código de otra persona, por lo que no tengo el lujo de decidir si usar o no el" estilo adecuado ". Claro que sería bueno suprimir estos errores, especialmente porque JSLint no progresará una vez encontrado ... – pieman72

3

JSLint comprueba si se sigue un buen estilo de código. Insertar llaves es siempre un buen estilo porque es obvio a dónde pertenece el código. Y que es más corto no es realmente un argumento, ya que la mayoría de los minificadores se ocupan de eso de todos modos.

7

"¿Hay una desventaja real para el uso de la notación más corta ..."

que puede ser la fuente de los errores si no se tiene cuidado acerca de su codificación, pero omitiendo les proporciona código limpiador IMO, y si cumple con los estándares de programación consistentes y bien pensados, omitirlos no será un problema.

Por ejemplo, cuando he anidado las declaraciones if/else que de otro modo son capaces de excluir las llaves, prefiero equilibrar el else s sobre el uso de llaves.

if (condition) 
    if (condition2) 
     inner_if() 
    else ; 
else 
    outer_if() 

que el código es aún más limpio que este OMI ...

if (condition) { 
    if (condition2) { 
     inner_if(); 
    } 
} else { 
    outer_if(); 
} 

Si alguien cosas que pueden añadir otra declaración a un if o else, entonces eso es una cuestión de entender que necesita ser arreglado .

Así que realmente solo se trata de qué estándares se deben usar. Aprovechar las llaves es ciertamente una opción válida, pero no deberíamos ser demasiado dogmáticos al respecto.


Si desea una herramienta más configurable, usted podría considerar jsHint.com lugar.

+0

¿Por qué el CW ????? –

+0

@ AdamRackis: Todas mis respuestas están ahora en CW. Creo que me gusta más así. –

+0

¿Cansado de la carrera de rata de representante, eh? :) –