5647 Stimmen

Welcher Gleichheitsoperator (== vs ===) sollte in JavaScript-Vergleichen verwendet werden?

Ich benutze JSLint durch JavaScript zu gehen, und es werden viele Vorschläge zum Ersetzen von == (zwei Gleichheitszeichen) mit === (drei Gleichheitszeichen), wenn Sie z. B. Folgendes vergleichen idSele_UNVEHtype.value.length == 0 innerhalb eines if Erklärung.

Gibt es einen Leistungsvorteil durch den Austausch von == con === ?

Da es viele Vergleichsoperatoren gibt, wäre jede Leistungsverbesserung zu begrüßen.

Wenn keine Typkonvertierung stattfindet, gibt es dann einen Leistungsgewinn gegenüber == ?

23voto

Paul Butcher Punkte 6794

Von der Kern-Javascript-Referenz

=== Rückgabe true wenn die Operanden streng gleich sind (siehe oben) ohne Typumwandlung.

23voto

Thomas Hansen Punkte 5473

Das Problem ist, dass man leicht in Schwierigkeiten geraten kann, da JavaScript eine Menge impliziter Konvertierungen hat, was bedeutet, dass...

var x = 0;
var isTrue = x == null;
var isFalse = x === null;

Das wird schnell zu einem Problem. Das beste Beispiel dafür, warum implizite Konvertierung "böse" ist, findet sich in diesem Code in MFC / C++, das aufgrund einer impliziten Konvertierung von CString nach HANDLE, das ein Zeigertyp ist, tatsächlich kompiliert werden kann...

CString x;
delete x;

Was natürlich während der Laufzeit die sehr undefinierte Dinge...

Google für implizite Konvertierungen in C++ und STL um einige der Argumente zu erfahren, die dagegen sprechen...

4 Stimmen

0 == null falsch ist.

22voto

user2601995 Punkte 5877

Vergleich der Gleichheit:

Betreiber ==

Gibt true zurück, wenn beide Operanden gleich sind. Die Operanden werden in den gleichen Typ konvertiert, bevor sie verglichen werden.

>>> 1 == 1
true
>>> 1 == 2
false
>>> 1 == '1'
true

Gleichheit und Typenvergleich:

Betreiber ===

Gibt true zurück, wenn beide Operanden gleich sind und den gleichen Typ haben. Im Allgemeinen ist es besser und sicherer, wenn Sie auf diese Weise vergleichen, da keine Typumwandlungen hinter den Kulissen vorgenommen werden.

>>> 1 === '1'
false
>>> 1 === 1
true

21voto

vivek_nk Punkte 1570

Null und undefiniert sind das Nichts, das heißt,

var a;
var b = null;

Hier a y b haben keine Werte. 0, false und '' hingegen sind allesamt Werte. Allen gemeinsam ist, dass es sich um falsche Werte handelt, was bedeutet, dass sie alle befriedigen fälschliche Bedingungen.

So bilden die 0, false und '' zusammen eine Untergruppe. Und andererseits bilden null & undefiniert die zweite Untergruppe. Überprüfen Sie die Vergleiche in der folgenden Abbildung. null und undefiniert wären gleich. Die anderen drei sind gleichwertig zueinander. Aber sie werden in JavaScript alle als falsche Bedingungen behandelt.

Enter image description here

Dies ist dasselbe wie jedes Objekt (wie {}, Arrays, usw.), nicht leere Zeichenketten und boolesche Wahrheiten sind alle wahrheitsgemäße Bedingungen. Aber sie sind nicht alle gleich.

21voto

Christian Hagelid Punkte 7897

Hier ist eine praktische Vergleichstabelle, die die Umrechnungen und die Unterschiede zwischen == y === .

Wie es in der Schlussfolgerung heißt:

"Verwenden Sie drei Gleiche, wenn Sie nicht genau wissen, welche Umrechnungen erforderlich sind die bei zwei Gleichen stattfinden."

http://dorey.github.io/JavaScript-Equality-Table/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X