Operator di Identità in ECMAScript

Die Überprüfung, ob zwei Variablen gleich sind, ist eine sehr wichtige Operation im Programmgestaltung. Bei der Verarbeitung von primitiven Werten ist diese Operation relativ einfach, aber wenn es um Objekte geht, wird die Aufgabe etwas komplexer.

ECMAScript bietet zwei Satz von Gleichheitsoperator: Gleichheitsoperator und Ungleichheitsoperator werden für primitive Werte verwendet, und der vollständige Gleichheitsoperator und der vollständige Ungleichheitsoperator werden für Objekte verwendet.

Gleichheitsoperator und Ungleichheitsoperator

In ECMAScript wird der Gleichheitsoperator durch das doppelte Gleichheitszeichen (==) dargestellt. Er gibt true zurück, wenn und nur wenn beide Operanden gleich sind. Der Ungleichheitsoperator wird durch das Ausrufezeichen und das Gleichheitszeichen (!=) dargestellt. Er gibt true zurück, wenn und nur wenn beide Operanden ungleich sind. Beide Operator führen eine Typumwandlung durch, um zu bestimmen, ob zwei Operanden gleich sind.

Die Regeln für die Umwandlung der Typen sind wie folgt:

  • Wenn einer der Operanden ein Boolean-Wert ist, wird dieser vor der Überprüfung der Gleichheit in einen numerischen Wert umgewandelt. false wird in 0 umgewandelt, true in 1.
  • Wenn einer der Operanden ein String ist und der andere eine Zahl, wird versucht, den String in eine Zahl umzuwandeln, bevor die Gleichheit überprüft wird.
  • Wenn einer der Operanden ein Objekt ist und der andere ein String, wird versucht, das Objekt in einen String umzuwandeln, bevor die Gleichheit überprüft wird.
  • Wenn einer der Operanden ein Objekt ist und der andere eine Zahl, wird versucht, das Objekt in eine Zahl umzuwandeln, bevor die Gleichheit überprüft wird.

Bei der Vergleichsoperation beachtet der Operator auch die folgenden Regeln:

  • Der Wert null und undefined sind gleich.
  • Bei der Überprüfung der Gleichheit dürfen null und undefined nicht in andere Werte umgewandelt werden.
  • Wenn einer der Operanden NaN ist, gibt der Gleichheitsoperator false zurück, der Ungleichheitsoperator true.
  • Wenn beide Operanden Objekte sind, wird verglichen, ob ihre Referenzwerte gleich sind. Wenn beide Operanden auf das gleiche Objekt verweisen, gibt der Gleichheitsoperator true zurück, sonst sind die beiden Operanden ungleich.

Wichtige Hinweise:Selbst wenn beide Zahlen NaN sind, gibt der Gleichheitsoperator false zurück, da nach den Regeln NaN nicht gleich NaN ist.

Nachstehend wird eine Liste einiger spezieller Fälle und deren Ergebnisse aufgeführt:

Ausdruck Wert
null == undefined true
"NaN" == NaN false
5 == NaN false
NaN == NaN false
NaN != NaN true
false == 0 true
true == 1 true
true == 2 false
undefined == 0 false
null == 0 false
"5" == 5 true

Vollständiger Gleichheitsoperator und nicht-konvertierender Ungleichheitsoperator

Der Gleichheitsoperator und der Ungleichheitsoperator sind die vollständigen Gleichheitsoperator und die nicht-konvertierenden Ungleichheitsoperator. Diese Operatoren tun das gleiche wie der Gleichheitsoperator und der Ungleichheitsoperator, nur dass sie keine Typumwandlung vor der Überprüfung der Gleichheit durchführen.

Der vollständige Gleichheitsoperator wird durch drei Gleichheitszeichen (===) dargestellt. Er gibt nur true zurück, wenn die Operanden ohne Typumwandlung gleich sind.

Beispiel:

var sNum = "66";
var iNum = 66;
alert(sNum == iNum); // Ausgabe "true"
alert(sNum === iNum); // Ausgabe "false"

In diesem Code verwendet die erste alert das Gleichheitszeichen, um den String "66" und die Zahl 66 zu vergleichen und "true" auszugeben. Wie bereits erwähnt, geschieht dies, weil der String "66" in die Zahl 66 konvertiert wird, bevor er mit der anderen Zahl 66 verglichen wird. Die zweite alert verwendet den vollständigen Gleichheitsoperator ohne Typumwandlung, um String und Zahl zu vergleichen. Natürlich ist der String nicht gleich der Zahl, daher wird "false" ausgegeben.

Der nicht-konvertierende Ungleichheitsoperator wird durch einen Ausrufezeichen und zwei Gleichheitszeichen (!==) dargestellt. Er gibt nur true zurück, wenn die Operanden ohne Typumwandlung ungleich sind.

Beispiel:

var sNum = "66";
var iNum = 66;
alert(sNum != iNum); // Ausgabe "false"
alert(sNum !== iNum); // Ausgabe "true"

Hier, die erste alert verwendet den Ungleichheitsoperator, um den String "66" in die Zahl 66 zu konvertieren, sodass er mit der zweiten Operanden 66 gleich ist. Daher ist das Ergebnis "false", da die beiden Operanden gleich sind. Die zweite alert verwendet den nicht-konvertierenden Ungleichheitsoperator. Diese Operation fragt: "Sind sNum und iNum unterschiedlich?" Die Antwort auf diese Frage ist: Ja (true), da sNum ein String und iNum eine Zahl sind, die natürlich unterschiedlich sind.