Kürzlich habe ich einen Teil meines Codes über JSLint ausgeführt, als ich auf diesen Fehler stieß. Das, was ich an diesem Fehler lustig finde, ist, dass automatisch davon ausgegangen wird, dass alle == === sein sollten.
Macht das wirklich Sinn? Ich konnte viele Fälle sehen, in denen Sie den Typ nicht vergleichen möchten, und ich mache mir Sorgen, dass dies tatsächlich Probleme verursachen könnte.
Das Wort "Erwartet" würde bedeuten, dass dies JEDES Mal getan werden sollte ..... Das macht für mich keinen Sinn.
javascript
jslint
Metropole
quelle
quelle
myVar == null
Überprüfung durchgeführt haben, ja, große Änderungen. ; ^) Crockfords Argument ist, dass es die Bedeutung des Codes präzisiert hat, und das ist schwer zu argumentieren.Antworten:
IMO, blind zu verwenden
===
, ohne zu verstehen, wie die Typkonvertierung funktioniert, macht wenig Sinn.Die Hauptangst gegenüber dem Operator "Gleich"
==
besteht darin, dass die Vergleichsregeln in Abhängigkeit von den verglichenen Typen den Operator nicht transitiv machen können, beispielsweise wenn:Garantiert das nicht wirklich:
Beispielsweise:
Der Operator Strict Equals
===
ist nicht unbedingt erforderlich, wenn Sie Werte desselben Typs vergleichen. Dies ist das häufigste Beispiel:Wir vergleichen das Ergebnis des
typeof
Operators, der immer eine Zeichenfolge ist , mit einem Zeichenfolgenliteral ...Oder wenn Sie beispielsweise die Regeln für Typzwang kennen, überprüfen Sie, ob etwas vorhanden ist
null
oder nichtundefined
:quelle
===
Operators ist die Klarheit des Codes. Es gibt keine vernünftige Situation,==
da diese niemals so klar und verständlich sein wird wie der Identitätsoperator. Es geht nicht darum, ob Sie die Operatoren verstehen oder nicht, es geht darum, den zu verwenden, der Ihren Code fast ohne Kosten leichter lesbar macht. Die einzigen Entwickler, die gegen den Identitätsoperator argumentieren, sind Einzelentwickler und Leute, die nicht in Teams arbeiten. Per Definition werden Personen, deren Code nicht von genügend Augen überprüft wird.there is no reasonable situation
ist eine grobe Falschangabe. Denken Sie an (native) Javascript-TypenNumber
undString
. Ihre Existenz beweist, dass die Javascript-Autoren bestimmte Anwendungsfälle im Auge hatten==
. Denken Sie wirklich, dass dienew String('hi') === 'hi'
Bewertung zufalse
sehr klar ist? Bitte schreiben Sie ein Code-Snippet, das Ihr Funktionsargument gegen das'hi'
Akzeptieren von String und String testet, und sagen Sie mir, dass dies klar ist.JSLint ist von Natur aus defensiver als die Javascript-Syntax zulässt.
Aus der JSLint-Dokumentation:
quelle
==
Operator. Das===
ist ein besonderer Fall ... versucht JSLint es scheint , wie mit==
irgendwie falsch wäre ... Aber versuchen Sie dies:var x = 4, y = new Number(4); if (x == y) {alert('Javascript depends on == just embrace it!');}
. Primitive Typen haben entsprechende Klassen, die sie ersetzen (Number
,String
), und Javascript hängt vom==
Operator ab, um diese natürlich zu vergleichen.Beachten Sie, dass JSLint die Vorstellung einer Person erzwingt, was gutes JavaScript sein sollte. Sie müssen immer noch den gesunden Menschenverstand verwenden, wenn Sie die vorgeschlagenen Änderungen implementieren.
Im Allgemeinen wird durch das Vergleichen von Typ und Wert Ihr Code sicherer (Sie werden nicht auf unerwartetes Verhalten stoßen, wenn die Typkonvertierung nicht das tut, was Sie denken).
quelle
Triple-Equal unterscheidet sich von Double-Equal, da Triple-Equal nicht nur überprüft, ob beide Seiten den gleichen Wert haben, sondern auch überprüft, ob sie denselben Datentyp haben.
So
("4" == 4)
ist wahr, während("4" === 4)
falsch ist.Triple-Equal läuft auch etwas schneller, da JavaScript keine Zeit mit Typkonvertierungen verschwenden muss, bevor Sie die Antwort erhalten.
JSLint zielt bewusst darauf ab, Ihren JavaScript-Code so streng wie möglich zu gestalten, um obskure Fehler zu reduzieren. Es wird diese Art von Dingen hervorgehoben, um zu versuchen, Sie dazu zu bringen, auf eine Weise zu codieren, die Sie dazu zwingt, Datentypen zu respektieren.
Das Gute an JSLint ist jedoch, dass es nur eine Anleitung ist. Wie sie auf der Website sagen, wird es Ihre Gefühle verletzen, selbst wenn Sie ein sehr guter JavaScript-Programmierer sind. Aber Sie sollten sich nicht verpflichtet fühlen, seinem Rat zu folgen. Wenn Sie gelesen haben, was es zu sagen hat, und Sie es verstehen, aber Sie sicher sind, dass Ihr Code nicht kaputt geht, müssen Sie nichts ändern.
Sie können JSLint sogar anweisen, Überprüfungskategorien zu ignorieren, wenn Sie nicht mit Warnungen bombardiert werden möchten, gegen die Sie nichts unternehmen werden.
quelle
Ein Zitat von http://javascript.crockford.com/code.html :
JSLint ist sehr streng, ihre 'webjslint.js' besteht nicht einmal ihre eigene Validierung.
quelle
webjslint.js
wenn man nicht validiert - obwohl die meisten Fehler, die ich derzeit sehe, mit dem Abstand zu tun haben. Natürlich muss man bei der Überprüfung von JavaScript mit JSLint gesunden Menschenverstand und vernünftiges Urteilsvermögen verwenden.always
disqualifiziert dieses Zitat automatisch als Weisheit. Intelligente Programmierer sind nicht dogmatisch. Sie verwenden das, was in der gegebenen Situation am besten ist. Und sie begrüßen und begrüßen jedes Werkzeug, das in den Kern der Sprache eingebaut ist, und entlassen es nicht einfach mit einemjust never touch it
. Fazit: Mein Code ist kürzer (und nicht nur durch das Speichern eines=
Zeichens), daher wird meine Website schneller und zu geringeren Bandbreitenkosten geladen, sodass mein Benutzer besser bedient wird.Wenn Sie auf Falschheit testen möchten. JSLint erlaubt nicht
aber erlaubt
quelle
===
, was JSLint empfiehlt.foo == null
prüft auf null oder undefiniert.!foo
prüft auf null, undefiniert, 0 und leere Zeichenfolge.Um diese Frage zu erklären und um zu erklären, warum NetBeans (ab) 7.3 diese Warnung anzeigt, ist dies ein Auszug aus der Antwort auf den NetBeans-Bug-Tracker, als jemand dies als Fehler meldete:
Es wird empfohlen, in JavaScript === anstelle von == zu verwenden.
Referenz
quelle
Nun, es kann nicht wirklich Probleme verursachen, es gibt Ihnen nur Ratschläge. Nimm es oder lass es. Trotzdem bin ich mir nicht sicher, wie schlau es ist. Es kann durchaus Kontexte geben, in denen es nicht als Problem dargestellt wird.
quelle