Die ist-gleich-operator (== vs ===) verwendet werden soll, in JavaScript Vergleiche?
Ich bin mit JSLint zu gehen, mit Hilfe von JavaScript und es zurückgeben viele Anregungen zu ersetzen ==
(zwei Gleichheitszeichen) mit ===
(drei Gleichheitszeichen), wenn Sie Dinge zu tun, wie der Vergleich idSele_UNVEHtype.value.length == 0
innerhalb eines if
- Anweisung.
Gibt es einen performance-Vorteil zu ersetzen ==
mit ===
?
Jede performance-Verbesserung würde willkommen sein, da viele Vergleichsoperatoren existieren.
Wenn keine Typ-Konvertierung stattfindet, würde es einen performance-Gewinn über ==
?
Wem es sein könnte, die am selben Thema interessiert
Nur im Fall, dass jemand wunderte sich, 2012:
es sollte es nicht tun, Typ-Konvertierung
Ich bezweifle, dass jemand geht, um Ihre Anwendung deutlich schneller geht es mit
Hier ist der Teil von Crockford ' s JS Die Guten Teile sprechen, wo er sich über die
=== vs ==
, aber in PHP, können Sie hier Lesen: stackoverflow.com/questions/2401478/why-is-faster-than-in-php/...Nur im Fall, dass jemand wunderte sich, 2012:
===
ist Art schneller als ==
. jsperf.com/comparison-of-comparisonses sollte es nicht tun, Typ-Konvertierung
Ich bezweifle, dass jemand geht, um Ihre Anwendung deutlich schneller geht es mit
===
über ==
. In der Tat, die benchmark nicht zeigen einen großen Unterschied zwischen den beiden auf modernen Browsern. Persönlich, ich in der Regel verwenden ==
überall, es sei denn, ich wirklich brauchen strikte Gleichheit.Hier ist der Teil von Crockford ' s JS Die Guten Teile sprechen, wo er sich über die
===
und ==
Operatoren: youtube.com/..., Wenn Sie nicht spielen, es ist am 15:20InformationsquelleAutor bcasp | 2008-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Identität (
===
) - operator verhält sich identisch zu der Gleichheit (==
) Betreiber außer, dass keine Typ-Konvertierung fertig ist, und die Typen müssen gleich sein und werden als gleich angesehen.Referenz: Javascript Tutorial: Vergleichsoperatoren
Den
==
- operator vergleichen, für die Gleichstellung nachdem ich alle notwendigen Typ-Konvertierungen. Die===
Betreiber nicht die Konvertierung zu tun, so dass, wenn zwei Werte nicht den gleichen Typ===
wird einfach zurückfalse
. Beide sind gleich schnell.Zitieren Douglas Crockford ' s ausgezeichnete JavaScript: Die Guten Teile,
Update:
Einen guten Punkt gebracht wurde, bis durch @Casebash in den Kommentaren und in @Phillipe Laybaert ist Antwort über Referenz-Typen. Für Referenz-Typen
==
und===
konsequent handeln miteinander (außer in einem besonderen Fall).Der Besondere Fall ist, wenn Sie vergleichen ein literal mit einem Objekt, das bewertet, um die gleiche literal, aufgrund seiner
toString
odervalueOf
Methode. Betrachten Sie beispielsweise den Vergleich von einem string-literal ein string-Objekt erstellt, indem derString
Konstruktor.Hier die
==
Betreiber ist die überprüfung der Werte der beiden Objekte und die Rückkehrtrue
, aber die===
ist zu sehen, dass Sie nicht in der gleichen Art und der Rückkehrfalse
. Welches ist das richtige? Das hängt wirklich davon ab, was du versuchst zu vergleichen. Mein Rat ist, zu umgehen, ist die Frage ganz einfach nicht mit demString
Konstruktor zum erzeugen von string-Objekten.Referenz
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
=== wird nie langsamer als ==. Sie beide führen die Typüberprüfung, so === nichts extra im Vergleich zu ==, aber der Typ Kontrollkästchen allow === Ausfahrt früher, wenn die Typen sind nicht das gleiche.
Austauschen alle,==/! = mit ===/!== erhöht die Größe der js-Datei, wird es dauern, dann mehr Zeit zum laden. 🙂
"...die Regeln, nach denen Sie das tun, sind kompliziert und uralten..." und Nun solche Aussagen fühlen Sie sich so sicher bei der Programmierung...
Manchmal JavaScript-type-system macht mich wollen laufen schreiend davon.
InformationsquelleAutor Bill the Lizard
Mithilfe der
==
operator (Gleichheit)Mithilfe der
===
operator (Identität)Dies ist, weil die Gleichheitsoperator
==
hat Typumwandlung, was bedeutet, dass der Dolmetscher implizit versucht, konvertieren Sie die Werte vor dem Vergleich.Auf der anderen Seite, die Identität Betreiber
===
nicht tun, geben Sie Zwang, und somit nicht konvertieren Sie die Werte, wenn Sie vergleichen.type coercion vs type casting vs type convertion
: stackoverflow.com/questions/8857763/...Denn niemand hat erwähnt das Javascript-Gleichheit-Tabelle, hier ist es: dorey.github.io - /JavaScript-Gleichheit-Tabelle
In der ersten Aussage, sind Sie sicher, dass 'true' konvertiert werden 1 und nicht 1 in true umgewandelt?
Wo kommen die Begriffe "Gleichheit" und "Identität" aus? Der standard unterscheidet nicht die Begriffe. Es fordert
==
"abstrakte Gleichheit" und es ruft===
"strikte Gleichheit". Gewährt Aufruf==
jede Art von "Gleichstellung" ist IMHO einfach nur schrecklich, da ist es nicht transitiv, aber warum Haarspalterei? Ich mehr Problem mit der "Identität", obwohl; ich denke, die Bezeichnung ist ziemlich irreführend, wenn es "funktioniert". Aber im ernst, wer prägte den Begriff "Identität"? Ich Suche die standard-und konnte es nicht finden.InformationsquelleAutor
Eine interessante bildliche Darstellung der Geschlechter-Vergleich zwischen
==
und===
.Quelle: http://dorey.github.io/JavaScript-Equality-Table/
var1 === var2
var1 == var2
die laufende Umsetzung der in dieser Tabelle ist hier: yolpo.com/embed.html?gist=344311f27fd88a9c2be8
du meinst, = = = oder !== anstelle von == oder != . Wollen nicht verwirren, die neue Programmierer 😉
aus meiner Erfahrung mit drei gleichen können zu Problemen führen und sollte vermieden werden, es sei denn, es vollständig zu verstehen. zwei Gleichheitszeichen erzeugt viel bessere Ergebnisse, weil 99% der Zeit, die ich wirklich nicht möchten Arten gleich zu sein.
Wenn Sie wirklich nicht wollen, dass die Typen gleich, sollte mit drei gleichen!
InformationsquelleAutor SNag
In den Antworten hier, habe ich nicht gelesen, was gleich bedeutet. Einige werden sagen, dass
===
bedeutet gleich und vom gleichen Typ, aber das ist nicht wirklich wahr. Es bedeutet eigentlich, dass beide Operanden das gleiche Objekt referenzieren, oder im Falle von Wert-Typen den gleichen Wert haben.So, nehmen wir den folgenden code:
Gilt auch hier:
Oder auch:
Dieses Verhalten ist nicht immer offensichtlich. Es gibt mehr zu der Geschichte als gleich und vom gleichen Typ.
Die Regel ist:
Für Wert-Typen (zahlen):
a === b
gibt true zurück, wenna
undb
haben den gleichen Wert und vom selben Typ sindFür Referenz-Typen:
a === b
gibt true zurück, wenna
undb
Referenz genau dasselbe ObjektFür Streicher:
a === b
gibt true zurück, wenna
undb
sind sowohl strings und enthalten die exakt gleichen ZeichenDie Saiten: der Besondere Fall...
Strings sind nicht Wert-Typen, aber in Javascript Verhalten Sie sich wie Werttypen, so werden Sie "gleich", wenn die Zeichen in der Zeichenfolge, sind die gleichen, und wenn Sie sind von derselben Länge (wie in der Dritten Regel)
Nun wird es interessant:
Aber wie wäre es damit?:
Ich dachte strings Verhalten sich wie Werttypen? Nun, es hängt davon ab, wer Sie Fragen... In diesem Fall a und b nicht vom gleichen Typ sind.
a
ist der TypObject
, währendb
ist der Typstring
. Denken Sie nur daran, dass die Schaffung eines string-Objekts mit derString
Konstruktor erzeugt etwasObject
dass verhält sich wie ein string die meiste Zeit.new Number() == "0"
. Auch im Firefox:(function(){}) == "function () {\n}"
Danke für die Erklärung, warum
new String("123") !== "123"
. Sie sind verschiedene Typen. Einfache, aber dennoch verwirrend.String
Objekte Verhalten sich strings wie jedes andere Objekt.new String
sollte nie verwendet werden, als das nicht schaffen, wirkliche strings. Eine echte string-und die können mit string-literalen oder rufenString
als eine Funktion ohnenew
zum Beispiel:String(0); //"0", Real string, not an object
Aber in den Fällen, die Sie detailliert, der operator "==" verhält sich genau gleich.
InformationsquelleAutor Philippe Leybaert
Lassen Sie mich fügen Sie diesen Rat:
Wenn Sie Zweifel haben, Lesen Sie die Spezifikation!
ECMA-262 ist die Spezifikation für eine scripting-Sprache, die JavaScript ist ein Dialekt. Natürlich sind in der Praxis von Bedeutung ist, wie sich die wichtigsten Browser Verhalten sich als eine esoterische definition, wie etwas sein soll, behandelt. Aber es ist hilfreich zu verstehen, warum new String ("") ! = = "a".
Bitte lassen Sie mich erklären, wie zu Lesen, die Spezifikation, diese Frage zu klären. Ich sehe, dass in diesem sehr alten Thema niemand hatte eine Antwort für den sehr seltsamen Effekt. Also, wenn Sie Lesen können, eine Spezifikation ist, wird Ihnen helfen, in Ihrem Beruf enorm. Es ist eine erworbene Fähigkeit. Also, lasst uns weiter.
Suche in der PDF-Datei === bringt mich auf Seite 56 Spezifikation: 11.9.4. Die Strenge ist-Gleich-Operator ( === ), und nach waten durch die specificationalese ich finde:
Interessant ist die Schritt 11. Ja, Streicher sind, behandelt, als Wert-Typen. Aber das erklärt nicht, warum new String ("") ! = = "a". Wir haben einen browser, die nicht gemäß ECMA-262?
Nicht so schnell!
Schauen wir uns die Typen der Operanden. Versuchen Sie es selbst heraus, indem er Sie in typeof(). Ich finde, dass new String("a") ist ein Objekt, und Schritt 1 verwendet: return false wenn die Typen unterschiedlich sind.
Wenn Sie sich Fragen, warum new String("a") nicht einen string zurückgeben, wie über einige übung Lesen eine Spezifikation? Spaß haben!
Aidiakapi schrieb dieser in einem Kommentar unten:
neue gibt immer ein Objekt, sogar für String Konstruktoren, zu. Und leider!!!! Die Wert-Semantik für Streicher (siehe Schritt 11) verloren.
Und dieser schließlich bedeutet: new String ("") ! = = "a".
Ich weiß nicht genau verstehen, die Angst, die über das Verhalten mit
new String('x')
, denn ich habe noch nie gesehen, dass irgendein code in freier Wildbahn, verwendet primitive wrapper-Objekte, und ich glaube nicht, dass es viel guten Grund, vor allem nicht in diesen Tagen. Haben Sie sich jemals begegnet code, der funktioniert?das problem ist, schädliche oder einfach nur schlampig third-party-code, dann kann man nicht davon ausgehen, dass niemand nutzt
new String()
.Wenn es schlampig, === ist, wie Sie herausfinden. Wenn es bösartig ist, ich denke
new String()
ist wahrscheinlich die am wenigsten Ihrer sorgen. Ich verstehe die Sorge, in der Theorie, aber wieder, haben Sie eine Reale Beispiele? Für mich ist es wie die alte Angst, jemand könnteundefined
zu einem anderen Wert.InformationsquelleAutor nalply
In PHP und JavaScript, es ist eine strikte Gleichheitsoperator. Das bedeutet, es wird Sie beide geben und Werte.
a = {}, b = {};
a == b
gibt false zurück.Ja: Zwei verschiedenen - Objekte mit dem gleichen Typ und Wert zu vergleichen, falsche, D. H., diese Antwort ist einfach falsch. Warum müssen es 50 upvotes?
Ich weiß, das ist alt, aber zu klären warum diese Antwort ist immer noch "richtige" ist, weil in dem Beispiel
var a = {}, b = {};
Während beidea
undb
ist tatsächlich sowohl ein Objekt, aber Sie sind nicht der dieselbe - Wert, technisch gesehen. Sie sind der anderen - Instanzen. Beachten Sie, dass zum vergleichen von Instanzen anders verhält als Vergleich primitiven. Die wohl fügt zu dieser Verwirrung. Sehen Sie ähnlichen Vergleich Verhalten, wenn Sie mit Instanz-version von primitiven Datentypen. E. gnew String('asdf')
odernew Number(5)
. Ex:new Number(5) == new Number(5)
falsch ist, obwohl Sie halten den gleichen Wert.Wir alle vergessen, dass eine Referenz auf ein Objekt ist tatsächlich ein Wert zu Geben, als es einen Zeiger auf einen Speicher-slot. Die Objekt-Vergleich ist nicht Vergleich der "Wert des Objekts", sondern, ob beide Zeiger sind die gleichen, das würde bedeuten, Sie auf den gleichen Speicher-slot. Das ist eine sehr subtile Unterschied im Vergleich der Arten, wie die "= = = " - operator muss wirklich sagen, "wenn die Art, der Wert und die Referenz auf das Objekt im Speicher sind die gleichen".
InformationsquelleAutor Shiki
Getestet habe ich diese in Firefox mit Firebug mit code wie diesem:
und
Meine Ergebnisse (getestet fünf mal pro und gemittelt):
So, ich würde sagen, dass der winzige Unterschied (dies ist über 100000 Iterationen, erinnern) ist vernachlässigbar. Leistung nicht ein Grund, das zu tun
===
. Art der Sicherheit (naja, so sicher wie du gehst, um in JavaScript), und die Qualität des Codes ist.==
widerspricht.Nun, wie kann diese vergleichen, wenn es eine tatsächliche Typ coersion für
==
Betreiber? Denken Sie daran, dass, wenn es einen performance-Schub.GROßEN Unterschied beim Test richtig für den oben genannten Gründen schneller, um nur zu überprüfen, geben Sie die Ungleichheit. jsfiddle.net/4jhuxkb2
InformationsquelleAutor Simon Scarfe
In JavaScript bedeutet es den gleichen Wert und Typ.
Beispielsweise
aber
InformationsquelleAutor Dimitar
Den === Betreiber ist aufgerufen, einen strikten Vergleichsoperator, es hat unterscheiden sich von den == Betreiber.
Lets take 2 vars a und b.
Für "a == b" zu "true" ausgewertet wird a und b müssen die gleichen Wert.
Im Fall von "a === b" a und b müssen die gleichen Wert und auch die gleichen Typ für es zu "true" ausgewertet wird.
Nehmen Sie das folgende Beispiel
Zusammenfassend; mit der == Betreiber könnte zu true ausgewertet, in Situationen, in denen Sie nicht wollen, dass es so mit der === Betreiber wäre sicherer.
In der 90% Auslastung Szenario spielt es keine Rolle, welches Sie benutzen, aber es ist praktisch zu wissen, den Unterschied, wenn Sie einige unerwartete Verhalten eines Tages.
InformationsquelleAutor Doctor Jones
Es überprüft, ob die gleichen Seiten sind gleich Typ sowie Wert.
Beispiel:
Allgemeines Beispiel:
Ein anderes häufiges Beispiel:
'string' !== 'number'
InformationsquelleAutor vsync
Warum
==
ist so unberechenbar?Was bekommen Sie, wenn Sie vergleichen eine leere Zeichenfolge
""
mit der Zahl null0
?true
Yep, das ist richtig laut
==
einen leeren string und die Zahl "null" sind die gleiche Zeit.Und es ist nicht das Ende, hier ist noch eins:
Werden die Dinge wirklich seltsam mit arrays.
Dann seltsamer mit Streichern
Es ist schlimmer:
, Wenn gleich nicht gleich?
Lassen Sie mich sagen, dass wieder:
- Und das ist nur die verrückten Sachen, die Sie mit primitiven.
Es ist eine ganz neue Ebene der verrückte wenn Sie
==
mit Objekten.Zu diesem Zeitpunkt Ihre wahrscheinlich Fragen,...
Warum geschieht dies?
Gut ist es da anders als "dreifache Gleichheitszeichen" (
===
), die nur prüft, ob zwei Werte identisch sind.==
hat eine ganze Reihe von anderen Sachen.Es hat eine Besondere Behandlung für Funktionen, die Besondere Behandlung für null, undefined, Streicher, you name it.
Es ist ziemlich abgedreht.
In der Tat, wenn Sie versucht, eine Funktion schreiben, die das tut, was
==
tut, es würde in etwa so Aussehen:Also, was bedeutet das?
Bedeutet es
==
ist kompliziert.Weil es kompliziert ist es ist schwer zu wissen, was passieren wird, wenn Sie es verwenden.
Was bedeutet, dass Sie könnten am Ende mit Fehler.
So ist die moral von der Geschichte ist...
Machen Sie Ihr Leben weniger kompliziert.
Verwenden
===
statt==
.Ende.
looseEqual
ist falsch.Function == Function.toString()
ist wahr, aberlooseEqual(Function, Function.toString())
ist falsch. Nicht sicher, warum Sie filter-out-Funktionen am Anfang.Sie hatten Recht, ich aktualisierte den code zu berücksichtigen FYI basierend auf meinen tests war es nicht genug, um den filter zu entfernen für "Funktionen", statt "Funktionen" hatte anders gehandhabt werden insgesamt.
Sich bewusst sein die Spezifikation behandeln nicht funktioniert anders, Sie sind nur Objekte. Das problem scheint, dass Sie verlassen sich auf
typeof x === "object"
zu prüfen, ob es ein Objekt, aber `typeof funktioniert nur für nicht-null-primitiven. Sie interessiert sein könnten my Liste der richtigen Möglichkeiten, um zu überprüfen, ob ein Wert ein ObjektIch habe versucht, die Behandlung von Funktionen und Objekten der gleichen gefunden, aber er Ergebnisse waren falsch. Zum Beispiel, wenn Funktionen wurden behandelt wie Objekte, dann vergleichen Sie eine Funktion, die ein Objekt implementiert, mit der valueOf() oder toString () - Funktion entspricht der Funktion bestehen würde, aber in Wirklichkeit ist es nicht. Beispiel:
(function blah() { console.log("test"); }) != {valueOf:function(){return "function blah() { console.log(\"test\"); }";}}
- überprüfen Sie heraus diese JS-Fiddle, die läuft den ganzen tests: jsfiddle.net/luisperezphd/7k6gcn6g (dort auf 1.225 test Permutationen)Du hast Recht, tolle Beobachtungen, das unterstreicht, dass der wichtigste Punkt, dass
==
macht eine Menge Dinge machen es sehr schwierig zu antizipieren, die Ergebnisse während===
ist viel mehr überschaubar und vorhersehbar, das ist einer der Hauptgründe===
ist die empfohlene Wahl. (Ich füge einen Hinweis auf die Antwort zu erwähnen, dein Punkt)InformationsquelleAutor Luis Perez
Ausführung von Javascript-flow-Diagramm für strikte Gleichbehandlung /Vergleich '==='
Ausführung von Javascript-flow-Diagramm für die nicht strikte Gleichheit /Vergleich '=='
string
Pfeil zeigt die große graue box ist, ist es eigentlich der Unterbrecher ist die Umwandlung der Zeichenfolge in eine Zahl?Es verweist auf den string option in der grauen box habe ich.e-saite -> # || NaN. Javascript ist nicht eine Art-Skript-Sprache, die ich.e grundsätzlich kann jede Art von variable. So, es wird darauf hingewiesen, dass die graue box.
Ich habe einfach gefragt, ob es für casting-Zwecke, da die
string
sein soll im Vergleich zu einem Typnumber
, so dass der Unterbrecher sieht sich an, was die Zeichenfolge verglichen werden sollte, und werfe den string entsprechend?Die große graue box ist, was
ToNumber
zurückkehren würde, wenn es verschiedene Typen, wenn es also gegeben ist ein string, es wird nur die Letzte option auswählen (und ihn in eine Zahl umzuwandeln).==
verwendetToNumber
nur in den Fällenstring == number
oderboolean == anything
oben (und nur auf diestring
/boolean
). Dies bedeutet==
nie konvertierenundefined
odernull
obwohl Sie in der grauen box. (Für jede Kombination von entwederundefined
odernull
oder beide==
immer wiedertrue
. Auch, ob ein Wert auf der linken oder auf der rechten Seite spielt keine Rolle,==
(und===
) wird wieder das gleiche Ergebnis.)InformationsquelleAutor Samar Panda
JavaScript
===
vs==
.InformationsquelleAutor
Bedeutet es Gleichheit ohne Typumwandlung
geben Sie Zwang bedeutet, dass JavaScript nicht automatisch konvertiert andere Datentypen in string-Datentypen
InformationsquelleAutor Pop Catalin
In einem typischen Skript gibt es keine performance-Unterschied. Wichtiger ist möglicherweise die Tatsache, dass tausend "===" 1 KB schwerer als tausend "==" 🙂 JavaScript-Profiler kann Ihnen sagen, wenn es einen performance-Unterschied in deinem Fall.
Aber ich persönlich würde das tun, was JSLint schlägt. Diese Empfehlung gibt es nicht, weil der performance-Probleme, aber da geben Sie Zwang bedeutet
('\t\r\n' == 0)
wahr ist.Einverstanden, aber tausend "===" bedeutet auch 10 Tausende von code-Zeilen sonst noch so 1 Kb mehr oder weniger... 😉
f Ihr, besorgt über die Größe, dann tauschen Sie Sie einfach alle Ihre == mit ===, dann mit einem regexp-verpackt in av-eval wechseln Sie zurück
InformationsquelleAutor Constantin
Die gleich Vergleichsoperator == ist verwirrend und sollte vermieden werden.
Wenn Sie MÜSSEN Leben, dann denken Sie daran, die folgenden 3 Dinge:
GLEICH-OPERATOR WAHRHEIT-TABELLE IN JAVASCRIPT
** SELTSAM: beachten Sie, dass zwei beliebige Werte in der ersten Spalte sind nicht gleich in diesem Sinne.**
InformationsquelleAutor CuongHuyTo
Es ist unwahrscheinlich, dass irgendwelche performance-Unterschied zwischen den beiden Operationen in Ihrer Nutzung. Es gibt keine Typ-Konvertierung durchgeführt werden, da beide Parameter sind bereits vom gleichen Typ. Beide Vorgänge haben einen Typ-Vergleich, gefolgt von einem Wert-Vergleich.
InformationsquelleAutor Sean
Ja! Es ist nicht egal.
===
- operator in javascript prüft den Wert als auch den Typ wo, wie==
operator prüft nur der Wert (nicht Typ-Konvertierung falls erforderlich).Können Sie einfach testen. Fügen Sie den folgenden code in eine HTML-Datei und öffnen Sie Sie im browser
Erhalten Sie 'false' in Alarm. Nun ändern Sie die
onPageLoad()
Methodealert(x == 5);
erhalten Sie wahr.InformationsquelleAutor Aniket Thakur
===
- operator überprüft die Werte als auch die Typen der Variablen auf Gleichheit.==
operator prüft nur den Wert der Variablen auf Gleichheit.InformationsquelleAutor Niraj CHoubey
Es ist ein strenger Prüfung zu testen.
Es ist eine gute Sache, vor allem, wenn Sie überprüft haben, zwischen 0 und false und null.
Zum Beispiel, wenn Sie haben:
Dann:
Alle gibt true zurück, und Sie können nicht wollen, dass diese. Nehmen wir an, Sie haben eine Funktion, die zurückkehren kann, den 0. index in einem array oder false im Fehlerfall. Wenn Sie das Kontrollkästchen mit "==" false ist, können Sie mit einem verwirrenden Ergebnis.
Also mit die gleiche Sache wie oben, aber einen strengen test:
0 != null
. -1InformationsquelleAutor Daniel
JSLint manchmal gibt Sie unrealistisch Gründen zu ändern was.
===
hat genau die gleiche Leistung wie==
wenn die Typen sind schon die gleichen.Ist es schneller, nur wenn die Typen nicht die gleichen sind, in welchem Fall es nicht versuchen, zu konvertieren von Typen, sondern direkt false zurück.
So, IMHO JSLint-vielleicht verwendet, um schreiben neuen code, aber nutzlos über-Optimierung sollte unter allen Umständen vermieden werden.
Bedeutung, es gibt keinen Grund, das zu ändern
==
zu===
im check wieif (a == 'test')
wenn Sie es wissen, für eine Tatsache, dass kann nur ein String sein.Ändern einer Menge von code, die Art und Weise Abfälle Entwickler und reviewer " Zeit und bringt nichts.
InformationsquelleAutor ashes
Einfach
==
bedeutet Vergleich zwischen Operanden mittype conversion
&
===
bedeutet Vergleich zwischen Operanden ohnetype conversion
Typumwandlung in javaScript mittels javaScript konvertiert automatisch alle anderen Datentypen in string-Datentypen.
Beispiel:
InformationsquelleAutor Amit
Ein einfaches Beispiel ist
InformationsquelleAutor Vikas
Als Faustregel würde ich in der Regel verwenden
===
statt==
(und!==
statt!=
).Gründe erläutert werden, die in den Antworten und auch Douglas Crockford ist ziemlich klar, über Sie (JavaScript: Die Guten Teile).
Aber es ist einer einzigen Ausnahme:
== null
ist eine effiziente Möglichkeit zu prüfen 'ist null oder undefiniert':Beispielsweise jQuery 1.9.1 verwendet dieses Muster 43 mal und die JSHint-syntax-checker bietet sogar die
eqnull
entspannende option für diesem Grund.Aus der jQuery-style-guide:
InformationsquelleAutor mar10
Oben 2 Antworten, die beide erwähnte, = = bedeutet Gleichheit und === bedeutet Identität. Leider ist diese Aussage falsch.
Wenn beide Operanden == sind Objekte, dann sind Sie im Vergleich zu sehen, wenn Sie das gleiche Objekt. Wenn beide Operanden auf das gleiche Objekt zeigen, dann wird der gleich operator true zurück. Ansonsten
die beiden sind nicht gleich.
Im code oben, beide == und === ist false, weil a und b nicht die gleichen Objekte.
Ist zu sagen: wenn beide Operanden == Objekte, ==, verhält sich identisch ===, was auch bedeutet Identität. Der wesentliche Unterschied dieser beiden Operatoren ist über den Typ zu konvertieren. == Konvertierung hat, bevor es prüft, Gleichheit, sondern === nicht.
InformationsquelleAutor Harry He
Das problem ist, dass Sie könnte leicht in Schwierigkeiten geraten, da JavaScript eine Menge von impliziten Konvertierungen Bedeutung...
Welche ziemlich bald ein problem. Das beste Beispiel, warum implizite Konvertierung ist "böse" entnommen werden kann, diesen code in MFC /C++, die eigentlich kompilieren wird durch eine implizite Umwandlung von CString zu BEHANDELN, die einen Zeiger typedef Typ...
Die offensichtlich während der Laufzeit nicht sehr Undefinierte Dinge...
Google für implizite Konvertierungen in C++ und STL, um einige der Argumente gegen...
0 == null
ist falsch.InformationsquelleAutor Thomas Hansen
Aus der core javascript-Referenz
InformationsquelleAutor Paul Butcher
Geschlechter-Vergleich:
Betreiber
==
Gibt true zurück, wenn beide Operanden gleich sind. Die Operanden werden in der gleichen Art vor, die verglichen werden.
Gleichheit und Typ-Vergleich:
Betreiber
===
Gibt true zurück, wenn beide Operanden gleich sind und der gleiche Typ. Es ist in der Regel
besser und sicherer ist, wenn Sie vergleichen, auf diese Weise, weil es kein hinter-die-kulissen Typ-Konvertierungen.
InformationsquelleAutor user2601995
*Operatoren === vs == *
InformationsquelleAutor Mr.G
Hier ist ein handliches Vergleich Tabelle zeigt, dass die Umwandlungen, die geschehen, und die Unterschiede zwischen
==
und===
.Wie die Schlussfolgerung Staaten:
http://dorey.github.io/JavaScript-Equality-Table/
InformationsquelleAutor Christian Hagelid