2012-03-02 13 views
31

Jestem całkowicie spokojny z powodu błędu JSLint. Jak mogę to tolerować? Czy jest tam flaga lub pole wyboru?Oczekiwano przypisania lub wywołania funkcji i zamiast tego zobaczyłem wyrażenie

Otrzymasz go, gdy robisz rzeczy jak:

v && arr.push(v); 

w przeciwieństwie do:

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

Zarówno zrobić samo dokładne. Jeśli umieścisz:

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

do minifier to minifies się do tego w każdym razie:

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

Odpowiedz

73

Nie sądzę JSLint posiada opcję Wyłącz to.

JSHint (widelec z większymi opcjami) ma jednak opcję: Opcja expr, udokumentowana jako "jeśli wyrażenie ExpressionStatement powinno być dozwolone jako Programy".

+0

+1 Dzięki za stronę :) – diEcho

+0

@diEcho: Możesz również pobrać i używać go lokalnie (to właśnie robię). Uruchamiam go za pośrednictwem NodeJS z moim preferowanym zestawem opcji, * znacznie * pomaga zwiększyć pewność co do poprawnego kodu. :-) –

+8

http://www.jshint.com/docs/options/#expr, aby uratować kogoś w przyszłości –

9

Nie ma opcji w JSLint. Można obejść go za pomocą:

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

NB: dummy ocenia się true po tym.

Innym Rozwiązaniem mogłoby być:

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

To zadziała, ale jest głupio. Minifier rzeczywiście to uporządkuje, ale dla lepszej czytelności lepiej po prostu użyć instrukcji 'if' niż IMO. – ryanve

+0

To prawda. Ale prosiłeś o sposób na tolerowanie. Dodano kolejne obejście. To tak, jakby Crockford powiedział gdzieś: * jsLint jest zaprojektowany, aby być bólem w dupę dla programistów *; ~) – KooiInc

+0

NIEWŁAŚCIE cudowny && hack nie działa w jsLint ... może zależy od wersji ... – faeb187

30

Możesz dodać następującą linię do zignorować ostrzeżenie:

/* jshint -W030 */

Możesz przeczytać więcej o tym here.

+3

Odpowiedź jest zupełnie niezwiązana na pytanie, które dotyczyło JSLint, a nie JSHint. –

+13

Jednak nadal jest to najbardziej przydatna odpowiedź dla większości ludzi, którzy tu lądują. –

+2

"całkowicie niepowiązanych"? Ponieważ JSHint jest całkowicie niezwiązany z JSLint? – iconoclast

Powiązane problemy