Was ist der Unterschied zwischen ==
und ===
in Javascript? habe ich auch gesehen !=
und !==
Betreiber. Gibt es noch mehr solcher Operatoren?
Unterschied zwischen == und === in JavaScript [duplicate]
Schiwa
sdfx
Schau mal hier: http://longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html
Die 3 Gleichheitszeichen bedeuten „Gleichheit ohne Typenzwang“. Bei Verwendung von Triple Equals müssen die Werte auch vom gleichen Typ sein.
0 == false // true
0 === false // false, because they are of a different type
1 == "1" // true, automatic type conversion for value only
1 === "1" // false, because they are of a different type
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
-
Danke für die klare Antwort! Ich denke, im Vergleich zu C# wäre das == auch == und === würde zu .Equals() übersetzt werden.
– Koen Zomers
1. Februar 2011 um 13:02 Uhr
-
was ist mit “new String()===new String()”, beide Werte und Typen sind gleich. Aber die Aussage gibt false zurück.
– hrishikeshp19
18. September 2012 um 0:36 Uhr
-
@hrishikeshp19: In diesem Fall sind die Werte tatsächlich unterschiedlich (unterschiedliche Objektreferenzen)
– l8nite
23. Oktober 2012 um 3:27 Uhr
-
@KoenZomers Ich glaube nicht, dass Ihr C#-Fall richtig ist. Tatsächlich gibt es in C# keine Entsprechungen. == in C# führt einen Referenzvergleich durch und Equals führt einen vordefinierten Vergleich durch, keiner von ihnen hat auch in JavaScript Entsprechungen.
– Erdmotor
22. November 2012 um 2:37 Uhr
-
@hrishikeshp19,
new String()
ist kein String-Typ, sondern ein Objekt-Typ, also gilt die ===-Regel für Objekte. Die Verwendung primitiver Zeichenfolgen führt jedoch häufig dazu, dass die Zeichenfolgen dazu gezwungen werdenString
Objekte, also ist der Unterschied subtil. Wenn Sie zuordnen würdennew String()
zu zwei verschiedenen Objekten,s1
unds2
dervalueOf()
-Methode für jede würde für jede eine Zeichenkette zurückgeben, unds1.valueOf() === s2.valueOf()
würden zurückkehrentrue
.– danorton
14. Februar 2013 um 23:26 Uhr
Jack Sleight
===
und !==
sind strenge Vergleichsoperatoren:
JavaScript hat sowohl einen strikten als auch einen typkonvertierenden Gleichheitsvergleich. Zum
strict
Gleichheit die zu vergleichenden Objekte müssen denselben Typ haben und:
- Zwei Zeichenfolgen sind absolut gleich, wenn sie dieselbe Zeichenfolge, dieselbe Länge und dieselben Zeichen an entsprechenden Positionen haben.
- Zwei Zahlen sind streng gleich, wenn sie numerisch gleich sind (den gleichen Zahlenwert haben).
NaN
ist nicht gleich nichts, einschließlichNaN
. Positive und negative Nullen sind einander gleich.- Zwei boolesche Operanden sind absolut gleich, wenn beide wahr oder beide falsch sind.
- Zwei Objekte sind streng gleich, wenn sie sich auf dasselbe beziehen
Object
.Null
undUndefined
Typen sind==
(aber nicht===
). [I.e. (Null==Undefined
) istrue
but (Null===Undefined
) isfalse
]
-
Also, wenn ich zum Beispiel mache:
if (input == null) ...
wird die Bedingung auch wahr, wenn die Eingabe nicht definiert ist?– Filip Vondrášek
25. Januar 2013 um 23:42 Uhr
-
Das Obige lässt es so klingen, als ob ein ==-Vergleich nicht alle Dinge im ersten Aufzählungspunkt überprüfen würde, “dieselbe Zeichenfolge, dieselbe Länge und dieselben Zeichen an entsprechenden Positionen”, aber tatsächlich tut es dies. Soweit ich das beurteilen kann, besteht der einzige wirkliche Unterschied beim Vergleich zweier Zeichenfolgen darin, dass mit ===
new String()===new String()
gibt false zurück (unterschiedliche Objektreferenzen). Abernew String
sollte sowieso vermieden werden.– Matt Browne
10. Februar 2013 um 1:44 Uhr
-
-1 Die Frage war “was ist der Unterschied?” und Sie haben nur die strengen Operatoren erklärt, aber nicht den Unterschied zwischen ihnen und den nicht strengen
– CodyBugstein
20. März 2014 um 7:21 Uhr
-
Ich habe nicht genau verstanden „Zwei Objekte sind absolut gleich, wenn sie sich auf dasselbe Objekt beziehen“ – was? mit zwei Objekten, bedeutet es zwei Referenzvariablen ..?
– TJ
30. September 2014 um 8:49 Uhr
-
Eine einfache englische Beschreibung des Problems finden Sie unter stackoverflow.com/a/38856418/984780
– Luis Pérez
2. März 2017 um 23:08 Uhr
==
ist===
mit Typkonvertierung (auch bekannt als Zwang). Um wirklich zu verstehen, was ich meine, können Sie sich diese JavaScript-Funktion ansehen, die sich genau so verhält==
: stackoverflow.com/a/38856418/984780– Luis Pérez
9. August 2016 um 17:17 Uhr
Einige möglicherweise überraschende Beispiele für
==
.– WerkzeugmacherSteve
27. Oktober 2020 um 19:41 Uhr
Ah, ja, der abstrakte Gleichheitsoperator (
==
), auch bekannt als wenn-gleicher-Typ-dann-strenger-Gleichheitsvergleich-andernfalls-behandle-null-und-undefiniert-und-Dokument-Punkt-alle-als-gleich-aber-wenn-String-beteiligt- mit-number-or-bigint-then-coerce-string-to-jeweiligen-numerischen-typ-aber-wenn-boolean-beteiligt-dann-coerce-it-to-number-but-if-object-involved-then- erzwingen-es-zu-primitiven-und-wenn-numerische-typen-beteiligt-sind-dann-vergleichen-sie-ihre-numerischen-werte-mit-eindeutigen-unendlichkeiten-und-nans-sind-ungleich-und-dann-wiederholen-wie- benötigter Betreiber.– Sebastian Simon
15. März 2021 um 8:41 Uhr