2012-03-02 7 views
31

Sono assolutamente soddisfatto di questo errore JSLint. Come posso tollerarlo? C'è una bandiera o una casella di controllo?Previsto un compito o una chiamata di funzione e invece ho visto un'espressione

si ottiene quando si fanno cose del genere:

v && arr.push(v); 

al contrario di:

if (v) { 
    arr.push(v); 
} 

Entrambi fanno la stessa cosa esatta. Se mettete:

window.test = function(v) { 
    'use strict'; 
    var arr = []; 
    if (v) { 
     arr.push(v); 
    } 
    return arr; 
}; 

nella minifier si minifies fino a questo comunque:

window.test=function(a){var b=[];a&&b.push(a);return b}; 

risposta

73

non credo JSLint ha un'opzione per spegnerlo.

JSHint (un fork con più opzioni) ha un'opzione per questo, tuttavia: l'opzione expr, documentata come "se ExpressionStatement dovrebbe essere consentita come Programmi".

+0

+1 Grazie per il sito Web :) – diEcho

+0

@diEcho: è anche possibile scaricarlo e utilizzarlo localmente (questo è quello che faccio). Lo eseguo tramite NodeJS con il mio set di opzioni preferito, * drammaticamente * aiuta la mia fiducia nel codice corretto. :-) –

+8

http://www.jshint.com/docs/options/#expr per risparmiare tempo a qualcuno in futuro –

9

Non c'è alcuna opzione per questo in JSLint. È possibile aggirare utilizzando:

var dummy = v && arr.push(v); 

NB: dummy viene valutato come true dopo.

Un'altra soluzione potrebbe essere:

function expression(statement) { 
'use strict'; 
return statement; 
} 
expression(v && arr.push); 
+6

Funzionerà ma è sciocco. Il minificatore lo risolverà, ma per la leggibilità sarebbe meglio usare semplicemente l'istruzione 'if' di quella IMO. – ryanve

+0

È vero. Ma hai chiesto un modo per tollerare è. Aggiunta un'altra soluzione alternativa. È come Crockford ha detto da qualche parte: * jsLint è progettato per essere un rompicoglioni per programmatori *; ~) – KooiInc

+0

SBAGLIATO il meraviglioso e & hack non funziona in jsLint ... forse dipende dalla versione ... – faeb187

30

è possibile aggiungere la seguente riga di ignorare questo avvertimento:

/* jshint -W030 */

Si può leggere di più a questo proposito here.

+3

La risposta è completamente indipendente alla domanda, che riguardava JSLint, non JSHint. –

+13

Tuttavia è ancora la risposta più utile per la maggior parte delle persone che arrivano qui. –

+2

"completamente non correlato"? Perché JSHint è completamente estraneo a JSLint? – iconoclast