Frage

Ich verstehe, dass die Verwendung des Typs "===" den Typ mit dem Typ vergleicht. Das Ausführen des folgenden Codes führt also zu "Nicht gleich", da er einen Zahlentyp mit einem String -Typ vergleicht.

var a = 20;
var b = "20";
    if (a === b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

Aber ich verstehe nicht, wie die Verwendung der "==" -Beucht nur die Wertung in der Nachricht "sie sind gleich" vergleichen.

var a = 20;
var b = "20";
    if (a == b) {
        alert("They are equal");
    } else {
        alert("They are not equal");
}

Wie sind die Werte gleich? Ist die Zeichenfolge nicht "20" als ASCII -Zeichen 50 und 48 (0110010 und 0110000 in Binär) und 20 als tatsächliche Binärzahl 0010100 gespeichert?

EDIT: Danke an alle! Ich denke, alle Antworten sind großartig und haben mir geholfen, das viel besser zu verstehen.

War es hilfreich?

Lösung

Das == Der Bediener vergleicht nur die Werte der Variablen. Wenn die Typen unterschiedlich sind, wird eine Konvertierung betrieben. Die Zahl 20 wird also in die Zeichenfolge "20" umgewandelt und das Ergebnis verglichen.

Das === Der Bediener vergleicht nicht nur die Werte, sondern auch die Typen, sodass kein Guss betrieben wird. In diesem Fall "20" !== 20

Andere Tipps

Wenn die Typumwandlung benötigt wird, konvertiert JavaScript die String-, Nummer-, Boolesche- oder Objektoperanden wie folgt.

  • Beim Vergleich einer Zahl und einer Zeichenfolge wird die Zeichenfolge in einen Zahlenwert konvertiert. JavaScript versucht, das Zeichen der Zeichenfolge numerisch in einen Zahlen -Typ -Wert zu konvertieren. Zunächst wird ein mathematischer Wert aus dem Zahlenstring -Literal abgeleitet. Als nächstes wird dieser Wert auf den Wert des nächsten Zahlen -Typs abgerundet.
  • Wenn einer der Operanden booleschen ist, wird der Boolesche Operand in 1 umgewandelt, wenn er wahr ist und +0, wenn er falsch ist.
  • Wenn ein Objekt mit einer Zahl oder einer String verglichen wird, versucht JavaScript, den Standardwert für das Objekt zurückzugeben. Operatoren versuchen, das Objekt in einen primitiven Wert, einen String- oder Zahlenwert zu konvertieren, indem sie die ValueOF- und ToString -Methoden der Objekte verwenden. Wenn dieser Versuch, das Objekt zu konvertieren, fehlschlägt, wird ein Laufzeitfehler generiert.

Das Problem mit dem Vergleich von == ist, dass JavaScript Version 1.2 keine Typkonvertierung durchführt, während die Versionen 1.1 und 1.3 dies tun.

Der Vergleich von === seit Version 1.3 ist verfügbar und ist der beste Weg, um zwei Variablenübereinstimmungen zu überprüfen.

Wenn Sie Ihren Code benötigen, um mit Version 1.1, 1.2- und 1.3 -Versionen des JavaScript -Code kompatibel zu sein, sollten Sie sicherstellen, dass die Variablen alle übereinstimmen, als ob es sich um einen === Vergleich handelt, der durchgeführt wurde.

Die JavaScript -Engine sieht das A als Zahl und wirft die B auf die Anzahl vor der Bewertung.

Ein Teil der Definition von "==" besteht darin, dass die Werte nach Möglichkeit vor dem Vergleich in die gleichen Typen konvertiert werden. Dies gilt für viele lose typisierte Sprachen.

JavaScript ist so gestaltet, dass eine Zeichenfolge, die Zahlen enthält, als "gleich" für diese Zahl angesehen wird. Der Grund dafür ist die Einfachheit der Nutzung für den Fall, dass Benutzer, die eine Nummer in ein Eingabefeld eingeben, und die Site in JS validiert - Sie müssen die eingegebene Zeichenfolge nicht vor dem Vergleich auf eine Zahl geben.

Es vereinfacht einen gemeinsamen Anwendungsfall, und der Operator === Operator ermöglicht es Ihnen weiterhin, auch mit dem betrachteten Typ zu vergleichen.

Soweit ich weiß, führt JavaScript die automatische Datentypkonvertierung im laufenden Fliegen durch - daher werden die Variablen möglicherweise automatisch an äquivalente Typen gegossen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top