Heim >Web-Frontend >js-Tutorial >Detaillierte Interpretation der impliziten Typkonvertierung durch doppelte Gleichheitszeichen in JavaScript (grafisches Tutorial)

Detaillierte Interpretation der impliziten Typkonvertierung durch doppelte Gleichheitszeichen in JavaScript (grafisches Tutorial)

亚连
亚连Original
2018-05-21 11:19:101236Durchsuche

Die durch das ==-Urteil in JavaScript verursachte Konvertierung löst eine Reihe von Ausführungsschritten des Interpreters aus. Als Nächstes erklären wir im Detail die implizite Typkonvertierung, die durch das doppelte Gleichheitszeichen in JavaScript verursacht wird it

Einführung

Die if-Anweisung sollte von Programmierern häufiger verwendet werden. Wenn eine Beurteilung erforderlich ist, verwendet die if-Anweisung im Allgemeinen ein doppeltes Gleichheitszeichen um die beiden Elemente vorher und nachher zu beurteilen. Ist der Rückgabewert wahr, wird die folgende Anweisung ausgeführt. Die in diesem Artikel erwähnte implizite Typkonvertierung bezieht sich auf die durch == verursachte Konvertierung. Um ein einfaches Beispiel zu geben: Das doppelte Gleichheitszeichen ist nicht das kongruente Zeichen. Das kongruente Zeichen ist „===“ und die Aussage „1“ == 1, dann wird im Allgemeinen die vorherige Zeichenfolge „1“ umgewandelt Nummer 1 und dann vergleichen. Anhand dieses Beispiels sollten Sie verstehen, was eine implizite Typkonvertierung ist!

Implizite Typkonvertierungsschritte

1. Überprüfen Sie zunächst, ob vor und nach dem doppelten Gleichheitszeichen NaN steht. Wenn es NaN gibt, wird immer false zurückgegeben.

2. Überprüfen Sie, ob vor oder nach dem doppelten Gleichheitszeichen ein Boolescher Wert steht. Wandeln Sie den Booleschen Wert in eine Zahl um. (falsch ist 0, wahr ist 1)

3. Überprüfen Sie dann, ob vor und nach dem doppelten Gleichheitszeichen eine Zeichenfolge steht:

Die andere Partei ist Objekt, und das Objekt verwendet toString() oder valueOf() zur Konvertierung;
2 Die andere Partei ist eine Zahl, und die Zeichenfolge wird in eine Zahl umgewandelt
3 Partei ist eine Zeichenfolge, direkter Vergleich;
4. Andere geben false zurück
IV . Wenn es sich um eine Zahl handelt und die andere Partei ein Objekt ist, wird für den Vergleich valueOf() oder toString() verwendet falsch

5. Null und undefiniert werden nicht typkonvertiert, sind aber gleich

Beachten Sie unbedingt die obige Konvertierungsreihenfolge, die bei Vorstellungsgesprächen häufig auftritt.

.toString()-Methode und .valueOf()-Methode Numerische Konvertierung

Normalerweise gehen wir davon aus, dass Sie zum Konvertieren eines Objekts in einen String die toString()-Methode aufrufen und konvertieren müssen Um es in eine Zahl umzuwandeln, müssen Sie die Methode valueOf() aufrufen, aber bei der tatsächlichen Anwendung ist es nicht so einfach. Sehen Sie sich das folgende Codebeispiel an:

var obj = {
 webName: "haorooms前端博客",
 url:"www.jb51.net"
}
console.log(obj.toString()); //[object Object]

Schauen wir uns auf die gleiche Weise die Methode valueOf() an :

var arr = [1, 2, 3];
console.log(arr.valueOf());//[1, 2, 3]

Aus dem obigen Code können Sie erkennen, dass die valueOf()-Methode das Objekt nicht in eine Zahl umwandelt, die dieses Objekt widerspiegeln kann. Stattdessen verwenden wir toString()

var arr = [1, 2, 3];
console.log(arr.toString());//1,2,3

Hinweis: Viele Freunde glauben, dass man zum Konvertieren in einen String zuerst die Methode toString() aufrufen muss. Wir sollten es so verstehen Der Aufruf der toString()-Methode kann zum Konvertieren in einen String, aber nicht unbedingt zum Konvertieren eines Strings, verwendet werden, indem zuerst die toString()-Methode aufgerufen wird.

Schauen wir uns den folgenden Code an:

var arr = {};
arr.valueOf = function () { return 1; }
arr.toString = function () { return 2; }
console.log(arr == 1);//true

var arr = {};
arr.valueOf = function () { return []; }
arr.toString = function () { return 1; }
console.log(arr == 1);//true

Wir können dem obigen Code entnehmen, dass die Konvertierung zuerst valueOf() aufruft, wenn valueOf() kein numerischer Wert ist, dann toString wird zur Bekehrung aufgerufen!

var arr = {};
arr.valueOf = function () { return "1"; }
arr.toString = function () { return "2"; }
console.log(arr == "1");//true

Wenn „1“ ein String ist, dann wird als erstes valueOf() aufgerufen.

var arr = [2];
console.log(arr + "1");//21

Im obigen Beispiel wird toString() aufgerufen, weil auf arr.toString() 2 folgt.

Der Konvertierungsprozess ist wie folgt: Zuerst ruft arr die Methode valueOf() auf, aber diese Zahlenmethode wird einfach geerbt und nicht neu geschrieben (diese Umschreibung wird von uns natürlich nicht implementiert). Der Rückgabewert ist Das Array-Objekt selbst ist kein Werttyp, daher wird stattdessen die Methode toString () aufgerufen, wodurch der Zweck der Konvertierung in eine Zeichenfolge erreicht wird.

Zusammenfassung

Die meisten Objekte werden implizit in einen Werttyp konvertiert, indem zunächst versucht wird, die Methode valueOf() aufzurufen. Eine Ausnahme stellt jedoch das Date-Objekt dar. Die Methoden valueOf() und toString() dieses Objekts wurden sorgfältig umgeschrieben In Umgebungen wird stattdessen die Methode valueOf() aufgerufen.

var date = new Date();
console.log(date + "1"); //Sun Apr 17 2014 17:54:48 GMT+0800 (CST)1
console.log(date + 1);//Sun Apr 17 2014 17:54:48 GMT+0800 (CST)1
console.log(date - 1);//1460886888556
console.log(date * 1);//1460886888557

Ich habe das Obige für Sie zusammengestellt und hoffe, dass es Ihnen in Zukunft hilfreich sein wird.

Verwandte Artikel:

Ausführliche Analyse des Argumentobjekts in JavaScript (grafisches Tutorial)

Grundlegende Einführung in JavaScript_object (muss lesen) (Grafik-Tutorial)

Detaillierte InterpretationJavascriptClient Event Driven (Grafik-Tutorial)

Das obige ist der detaillierte Inhalt vonDetaillierte Interpretation der impliziten Typkonvertierung durch doppelte Gleichheitszeichen in JavaScript (grafisches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn