2011-10-05 13 views
6

JSLint se queja de que (true) es weird condition. Lo cual es comprensible si no lo estaba usando en una declaración de interruptor invertido. Entonces, ¿JSLint está equivocado o no debería usar instrucciones de cambio inversas?¿Es una declaración de interruptor invertido aceptable JavaScript?

Gracias por cualquier ayuda/aclaración.

switch (true) { 
    case (menuLinksLength < 4): 
     numberOfColumns = 1; 
     break; 
    case (menuLinksLength > 3 && menuLinksLength < 7): 
     numberOfColumns = 2; 
     break; 
    case (menuLinksLength > 6 && menuLinksLength < 10): 
     numberOfColumns = 3; 
     break; 
    case (menuLinksLength > 9): 
     numberOfColumns = 4; 
     break; 
    default: 
     numberOfColumns = 0; 
} 
+0

Por lo que vale, puede mantener su instrucción de cambio invertido y aún así satisfacer el linter si usa 'switch (true === true)'. Esto no es un endoso de la práctica;) –

+0

'switch (true === true)' no ayuda, ya que eso hace que se queje de una "relación extraña". –

+0

var theTruth = true; ----- switch (theTruth) {...} – dbrin

Respuesta

3

La tercera edición de la ECMA-262 estándar (con el apoyo de Firefox 1.0+, Google Chrome 1.0+, MSIE 5.5+ y otros) que define

switch (expression) { 
    case label1: 
     statements1 
    . 
    . 
    . 
} 

ejecuta statements1 si (expression) partidos label1.

Eso significa que su declaración switch está perfectamente bien.

Lo probé en Firefox, Chrome e IE. Ninguna queja ...

Editar:

Ahora la parte de adivinanzas:

JSLint es una herramienta de código anaylisis. Cuando ve switch (true), asume que no sabe lo que está haciendo. extraño no significa necesariamente malo ...

+2

La razón por la que me causa un problema es porque la empresa para la que trabajo lo usa en sus scripts de compilación y falla cuando JSLint devuelve 'extraño'. No sé cómo se clasifican los errores en JSLint, pero supongo que podría no ser su culpa. Gracias por la ayuda. – moefinley

+0

¿No hay manera de deshabilitar esta comprobación? –

+0

@Danny: No hay pista. Nunca he usado JSLint. – Dennis

5

Personalmente no les gusta ver switch invertido en una base de código. No le compra nada en comparación con un simple bloque if/elseif, y su naturaleza exótica puede ser motivo de confusión.

Eso es también lo que se queja de JSLint:

Usted está haciendo algo poco ortodoxo. ¿Hay una buena razón para eso? Si no es , sería mejor que se siguiera lo básico.

+5

Sé que es una preferencia personal. Pero personalmente encuentro una gran cantidad de declaraciones if mucho más desordenadas. – moefinley

+0

Pero ese es el objetivo de JSLint. Te aconseja no solo sobre el código ilegal, sino también sobre las malas prácticas de codificación. Y este "interruptor inverso" es un gran ejemplo de código "inteligente" (* i.e. *, código que los cambios futuros probablemente romperán, y que no es particularmente legible). –

Cuestiones relacionadas