JSLint meldet das Zeichen "Unerwartetes Baumeln" in einem unterstrichenen Variablennamen mit Präfix


73

Ich weiß, dass einige Leute das Vorhandensein eines führenden Unterstrichs als Hinweis darauf betrachten, dass eine Variable "privat" ist, dass diese Privatsphäre eine Fiktion ist, und dass JSLint aus diesem Grund solche Namen mit einer Fehlermeldung meldet.

Ich verwende Google Analytics auf einer Website, die ich erstelle. Ich beziehe mich auf GAs Variablen wie "_gaq".

Ich versuche, meinen JS-Code zu 100% JSLint-sauber zu machen (ich bin nicht religiös in Bezug auf meinen Codierungsstil und werde mich daher an Mr. Crockfords Anwalt wenden). Trotzdem kann ich nichts gegen die Variablennamen von Google unternehmen. Ich glaube, ich kann nicht 100% "sauber" werden.

Ich poste hier, falls ich die Nachricht falsch verstanden habe, und kann etwas tun, um die JSLint-Praktiken einzuhalten.


2
Ich verstehe nicht, warum der Unterstrich schlecht sein sollte.
Oliver Watkins

Antworten:


72

Ah, ich habe das erledigt ... Ich verpacke die Anweisungen, die die Variablen mit dem Unterstrich als Präfix verwenden, mit JSLint-Befehlen, um sie zu deaktivieren, und aktiviere dann diese Fehlerklasse wieder:

/*jslint nomen: true*/
... statement(s) with _var ...
/*jslint nomen: false*/

12
-1. Um diese Warnung zu deaktivieren, müssen Sie das Nomen setzen: zuerst auf true, dann auf false. Von der jslint-Website: "true, wenn Namen nicht auf anfängliche oder nachfolgende Unterbalken überprüft werden sollen."
Igor Zevaka

3
Dies entspricht nicht den JSLint-Praktiken. Es deaktiviert die Überprüfung auf diese Warnung.
WhyNotHugo

3
Dies wird unordentlich, wenn Sie eine Bibliothek wie underscore.js verwenden. Verwenden Sie jslint --nomen <filename>stattdessen.
Pseudosudo

51

Der beste Weg, dies zu handhaben, besteht darin, die Option "Dangling _ in Bezeichnern tolerieren" (Nomen) zu aktivieren. Weitere Informationen finden Sie unter http://www.jslint.com/lint.html ...


7
Dies ist die beste Antwort auf die gestellte Frage. Ich wünschte, jslint würde Unterstriche tolerieren, aber keine _ Identifikatoren ...
John Dhom

1
Könnten Sie bitte einen funktionierenden Link bereitstellen? Ich bin irgendwie verwirrt, wie ich die geeigneten Ressourcen finde.
OddDev

Die Links in der Antwort und die Kommentare sind defekt. Es ist besser, die Antwort hier aufzunehmen, als darauf zu verlinken
Tim Partridge

15

JSLint ist nur ein Tool zur Codequalität. Wenn Sie die Tests nicht vollständig bestehen, bedeutet dies nicht, dass Ihr Code schlecht ist. es bedeutet einfach, dass Sie nicht alle Konventionen befolgen, die von seinem Schöpfer festgelegt wurden. Obwohl JSLint sehr gute Vorschläge macht, ist es nicht immer möglich, alle zu erfüllen, insbesondere wenn die Bibliothek eines anderen verwendet wird, die nicht dagegen getestet wurde. Anstatt Ihren Quellcode mit bedeutungslosen Metakommentaren zu verunreinigen, sollten Sie Ihren Code mit deaktivierter Option "Dangling _ in Bezeichnern nicht zulassen" überprüfen, da die Verwendung mit Ihrem bestimmten Code nicht sinnvoll erscheint.


1
Ich schätze Ihre Perspektive und obwohl JSLint die Vision einer Person ist, hat es für mich gut funktioniert, dass meine Codebibliothek 100% sauber ist - wenn ich Fehler habe, sind sie immer logisch.
Zhami

1
Mein Hauptpunkt ist, dass die JSLint-Metakommentare dazu neigen, die Lesbarkeit zu verringern und wahrscheinlich einen anderen Leser dazu bringen würden, "Huh?" Zu sagen. Daher wäre es eine bessere Idee, diese bestimmte Prüfung entweder zu ignorieren oder zu deaktivieren, als sie in Ihrer Quelle zu belassen.

2
Und was ist mit anderem Code, der nicht von der fehlerhaften externen Bibliothek abhängt? Dafür sind die Anweisungen / * jslint gedacht. Es ist keine Entscheidung, die Sie global treffen müssen.
1983

8

Ich benutze JSLInt mit node.js. Sie können die Flagge --nomen übergeben, um diese Funktion zu umgehen

jslint --nomen myfile.js 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.