Hallo Mathias,
Die [Probleme] kann man im Bugtracker von JSHint nachlesen.
Immerhin aber von JSLint abgeleitet:
Ja, klar. Sonst hätte ich es in dem Kontext nicht erwähnt.
aber was ist der Bugtracker von JSHint?
https://github.com/jshint/jshint/issues
Übrigens zur Erklärung: Ich stehe JSLint so kritisch gegenüber,
- weil ich JavaScript relativ gut kann
weiß ich
und er mich mit den dämlichen starren Regeln hauptsächlich nervt, meine Produktivität einschränkt und mich zu schlechter lesbaren und wartbaren Code zwingt, anstatt mich auf wirkliche Fehler in meinem Code hinzuweisen. Siehe beispielsweise Type Coercion.
naja, das kann man sicher so oder so sehen (;-).
- weil ich viel CoffeeScript schreibe und damit ohnehin viele Fallstricke von JavaScript umgangen werden. Der generierte JS-Code ist m.W. auch JSLint-konform.
(;-)
- Viele verbleibende Fallstricke durch den ES5 Strict Mode abgedeckt werden, welchen ich für sämtlichen Code anschalte (und in entsprechenden Browsern teste).
ja, den habe ich bei Crockfords jslint zum ersten mal gesehen.
JSHint ist daher schon ein Schritt in die richtige Richtung. Allerdings habe ich das letztens ausprobiert und nur festgestellt, dass er (genauso wie JSLint) Function Expressions, Function Declarations und Hoisting nicht korrekt versteht.
Hoisting heißt (http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/), dass ich lieber die variable am Anfang deklariere, weil sonst murx passiert, s. Link. Was ja wieder JSLint-konform wäre.
Ich glaube, das ist mittlerweile zumindest teilweise gefixt. Allerdings weicht das natürlich auch die Crockfordschen Regeln auf. Der verbietet die Nutzung von Function Declarations und deren Hoisting einfach und propagiert immer Function Expressions à la var f; f = function () {}; anstatt function f () {}.
Letzteres ist ja auch nicht zu unterscheiden von einer named function expression, wie ich auf der von dir verlinkten seite las.
Ich kann schon verstehen, dass nicht jeder den Crockford-strict-mode mag. Ich verstehe aber durchaus, dass der Code dadurch nicht massiv schlechter wird. Vielleicht etwas anders. Einem Anfänger wie mir hilft das durchaus. Das Konstrukt
var myFun = function innerName() {
...
if(notFinished) {
innerrName();
}
...
}
ist mir erst durch JSLint aufgestoßen (natürlich kombiniert dann mit der Diskussion hier und u.U. bei der jslint_com.yahoogroup...).
Gruß Robert aka
jobo