Während des JavaScript -Anwendungsprozesses werden wir auf verschiedene Vergleiche stoßen. Heute habe ich drei Situationen für Sie zusammengestellt und sie zusammen gelernt.
1. Vergleich von zwei Objekten
JavaScript -Vergleiche werden mit einigen seltsamen Merkmalen gemischt. Schauen wir uns einige einfache Vergleiche an.
// Vergleich der Rohwerte> var a = 12undefined> var b = 12undefined> A == BTREE> A === BTRUE // Vergleich von Objekten> var c = [] undefiniert> var d = [] undefiniert> C == DFALSE> C === DFALSE
Aus den obigen Ergebnissen können wir sehen, dass der Vergleich von zwei ursprünglichen Werten sich von dem Vergleich von Objekten unterscheidet. Wenn Sie die Werte von zwei Objekten vergleichen, auch wenn ihre Werte gleich sind, ist das Endergebnis unterschiedlich. Beim Vergleich von zwei Objekten sollten die Referenzen der beiden Objekte verglichen werden.
Wenn wir das tun:
> var m = {} undefined> n = m {}> n === mtrueDies bedeutet, dass beide Variablen auf dasselbe Objekt verweisen, sodass sie gleich sind.
2. Vergleich verschiedener Typen
Es gibt auch die folgende besondere Situation
> 12 == "12" true> null == undefinedTrue> undefined == Falschfalse> null == Falschfalse> null === undefinedFalse
Warum können Ganzzahlen den Saiten gleich sein? Dies liegt daran, dass == (gleich, nicht kongruent) keine Typen verglichen. Vor dem Vergleich werden die Werte eingeblendet, die verglichen werden müssen. Hier wird die Zeichenfolge in numerische Typen konvertiert und dann verglichen . Warum ist es so sicher? Lassen Sie uns einige Experimente durchführen.
> 1 + 23> 1 + "2" '12'> 2 <"12" True> "2" <"12" Falsch
Aus dem obigen Beispiel können wir sehen, dass der Wert 2 tatsächlich kleiner als der Zeichenfolge 12 ist. Wenn der Vergleich in eine Zeichenfolge konvertiert wurde, bevor der Wert in eine Zeichenfolge konvertiert wurde, sollte das Ergebnis "2"> "12" sein.
Glauben Sie es noch nicht? Lassen Sie mich Ihnen ein weiteres Beispiel geben.
> "12d"> 12false> "12d" <12false> "12d" == 12False> "12" <"12d" true
Warum ist das? Wenn Sie 12 in eine Zeichenfolge umwandeln, sollte 12D größer als 12 sein, oder? Warum vergleichen Sie es mit falsch? Ich denke, es liegt an dem besonderen Typ unten.
> Nan <1False> nan> 1False
Egal was Nan vergleicht, es wird falsch zurückkehren. Einschließlich sich selbst. Daher ist der beste Weg, um festzustellen, ob eine Variable Nan ist x! = X, wenn die zurückgegebene True bedeutet, dass X NAN ist . Dann sollte es hier sein, wenn 12d in einen numerischen Typ konvertiert werden soll, da er Sonderzeichen hat und schließlich NAN wird. Egal wie Sie es mit dem numerischen Typ vergleichen, das Ergebnis ist falsch.
Für numerische und String -Operatoren verhält sich der Plus -Zeichenbetreiber anders als der Vergleichsbetreiber. Der Plus -Operator bevorzugt Zeichenfolgen, und wenn einer der Operanden eine Zeichenfolge ist, wird er in eine Zeichenfolge umgewandelt. Vergleichsoperatoren bevorzugen Zahlen, und String -Vergleiche werden nur durchgeführt, wenn beide Zahlen Strings sind.
Was den Null und Undefined oben betrifft. . . . . Ich weiß nicht, wie ich ihr Verhalten vorerst erklären soll. Ich kann mich nur vorerst daran erinnern. Weil sie etwas Besonderes sind.
3.. Vergleich von Objekten mit Originalwerten
Wenn zwei Objekte, die verglichen werden müssen, JavaScript -Objekte und -Skelette sind, wird ein gewisses Maß an Typumwandlung durchgeführt. Finden Sie einen Weg, um den Wert des Objekts in den ursprünglichen Wert umzuwandeln. Im Allgemeinen gibt es zwei Methoden valueOf, toString . Das Folgende ist der Konvertierungsprozess eines leeren Objekts:
// Ich habe es direkt ausgeschrieben> a = {} {} // 1. ValueOF Conversion> a.ValueOf () {} // 2. Wenn die obige Operation zu einem Rohwert führt, verwenden Sie dann den ToString, um sich zu konvertieren. (Und umgekehrt)> A.ToString () '[Objektobjekt]'> A == '[Objektobjekt]' true Das obige ist eigentlich ein integrierter Objektumwandlungsverfahren und ein JavaScript-Mechanismus. Zunächst ruft es valueOf for Conversion auf. Wenn der erhaltene Wert kein primitiver Wert ist, ruft er zum Umbau ein, um toString zu erhalten. Der Endwert ist '[object Object]' ein sehr seltsamer Wert, aber es ist der ursprüngliche Wert. Wenn die Variable A und dieser Wert gleich (nicht kongruent) sind, kann ein echtes Ergebnis erzielt werden. (Hat es zusammengebrochen?)
Der maßgebliche Leitfaden gibt jedoch die folgenden Prinzipien an, wir können darauf verweisen.
Konvertieren Sie die integrierten RAW-Werte JavaScript Language Core-In-Klassen zuerst, versuchen Sie zuerst, mit ValueO F zu konvertieren, und verwenden Sie dann toString Umwandlung. Mit Ausnahme der Datumsklasse verwendet es nur toString für die Konvertierung. Objekte, die sich nicht im Kern von JavaScript befinden, werden durch die Art und Weise, wie sie in ihren jeweiligen Implementierungen definiert sind, in Originalwerte konvertiert.
Nach der obigen Erklärung. Wenn wir a = {} mit dem ursprünglichen Wert vergleichen, werden wir zuerst die valueOf -Funktion aufrufen, und das Ergebnis ist, dass {} offensichtlich kein primitiver Wert ist. Anschließend wird die Konvertierung mit toString durchgeführt. Schließlich kam dieses seltsame Ergebnis heraus. Aber dieses seltsame Ergebnis '[object Object]' ist in der Tat der ursprüngliche Wert von {}. (Es ist das wörtliche Schnur).
Das obige ist eine vergleichende Zusammenfassung in JavaScript. Ich hoffe, dass die Beschreibung in diesem Artikel für alle hilfreich ist, wenn JavaScript gelernt wird.