Zunächst einige Begriffe zu Javascript String Equals: Double equals ist offiziell als abstrakter Gleichheitsvergleichsoperator bekannt, während triple equals als strenger Gleichheitsvergleichsoperator bezeichnet wird. Der Unterschied zwischen ihnen lässt sich wie folgt zusammenfassen: Bei der abstrakten Gleichheit wird versucht, die Datentypen vor dem Vergleich durch Typenzwang aufzulösen. Strenge Gleichheit gibt false zurück, wenn die Typen unterschiedlich sind. Betrachten Sie das folgende Beispiel:
console.log(3 == "3"); // true
console.log(3 === "3"); // false.
console.log(3 == "3"); // true
console.log(3 === "3"); // false.
Die Verwendung von zwei Gleichheitszeichen ergibt true, da die Zeichenkette "3" in die Zahl 3 umgewandelt wird, bevor der Vergleich durchgeführt wird. Bei drei Gleichheitszeichen wird festgestellt, dass die Typen unterschiedlich sind, und falsch zurückgegeben. Hier ist eine andere:
console.log(true == '1'); // true
console.log(true === '1'); // false
console.log(true == '1'); // true
console.log(true === '1'); // false
Auch hier führt der abstrakte Gleichheitsvergleich eine Typumwandlung durch. In diesem Fall werden sowohl der boolesche Wert true als auch die Zeichenkette '1' in die Zahl 1 umgewandelt und das Ergebnis ist true. Strenge Gleichheit ergibt false.
Wenn Sie das verstehen, sind Sie auf dem besten Weg, zwischen == und === zu unterscheiden. Es gibt jedoch einige Szenarien, in denen das Verhalten dieser Operatoren nicht intuitiv ist. Schauen wir uns ein paar weitere Beispiele an:
console.log(undefined == null); // true
console.log(undefined === null); // false. Undefined and null are distinct types and are not interchangeable.
console.log(undefined == null); // true
console.log(undefined === null); // false. Undefined and null are distinct types and are not interchangeable.
console.log(true == 'true'); // false. A string will not be converted to a boolean and vice versa.
console.log(true === 'true'); // false
console.log(true == 'true'); // false. A string will not be converted to a boolean and vice versa.
console.log(true === 'true'); // false
Das folgende Beispiel ist interessant, weil es verdeutlicht, dass sich String-Literale von String-Objekten unterscheiden.
console.log("This is a string." == new String("This is a string.")); // true
console.log("This is a string." === new String("This is a string.")); // false
console.log("This is a string." == new String("This is a string.")); // true
console.log("This is a string." === new String("This is a string.")); // false