2011-10-05 15 views
6

JSLint si lamenta che (true) è un weird condition. Il che è comprensibile se non lo stavo usando su una dichiarazione di inversione di marcia. Quindi JSLint è sbagliato o non dovrei usare le istruzioni switch invertite?Un'istruzione switch invertita è accettabile per JavaScript?

Grazie per qualsiasi aiuto/illuminazione.

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

Per quello che vale, è possibile mantenere l'istruzione invertita e continuare a soddisfare il linter se si utilizza 'switch (true === true)'. Questo non è un avallo della pratica;) –

+0

'switch (true === true)' non aiuta, in quanto ciò lo induce a lamentarsi di una "relazione strana". –

+0

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

risposta

3

La terza edizione del ECMA-262 standard (supportato da Firefox 1.0+, Google Chrome 1.0+, MSIE 5.5 + e altri) definisce che

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

esegue statements1 se (expression) partite label1.

Ciò significa che l'istruzione switch è perfettamente a posto.

L'ho provato su Firefox, Chrome e IE. Nessuno si lamenta ...

Edit:

Ora la parte indovinare:

JSLint è uno strumento di codice anaylisis. Quando vede switch (true), presuppone che tu non sappia cosa stai facendo. Strano non significa necessariamente sbagliato ...

+2

Il motivo per cui mi sta causando un problema è perché la società che lavoro lo utilizza nei propri script di compilazione e fallisce quando JSLint restituisce "strano". Non so come siano classificati gli errori in JSLint, ma suppongo che potrebbe non essere colpa sua. Grazie per l'aiuto. – moefinley

+0

Nessun modo per disabilitare questo controllo, quindi? –

+0

@Danny: nessun indizio. Non ho mai usato JSLint. – Dennis

5

Personalmente non piace vedere invertito switch in una base di codice. Non ti compra nulla se paragonato ad un semplice blocco if/elseif, e la sua natura esotica può essere motivo di confusione.

Questo è anche ciò che JSLint si lamenta:

si sta facendo qualcosa non ortodosso. C'è una buona ragione per questo? Se non lo è , potrebbe essere meglio attenersi alle nozioni di base.

+5

So che è tutto di preferenza personale. Ma personalmente trovo una massa di affermazioni se molto più meschine. – moefinley

+0

Ma questo è il punto principale di JSLint. Ti consiglia non solo di codice illegale, ma anche di cattive pratiche di codifica. E questo "interruttore invertito" è un ottimo esempio di codice "intelligente" (* i.e. *, codice che probabilmente cambierà il futuro, e che non è particolarmente leggibile). –

Problemi correlati