Während des JavaScript -Programmschreibprozesses konvertiert JS das Objekt automatisch in die Zahl oder eine Zeichenfolge und verarbeitet es dann nach verschiedenen Kontexten. Die Regeln für diese automatische Konvertierung sind wie folgt:
Die Regel für das automatische Konvertieren von Objekt in Zeichenfolge:
1. Wenn das Objekt zur Klasse gehört, überschreibt die Methode toString () die Methode. Wenn das Rückgabeergebnis des toString () -Anrufs primitiv ist (String, Anzahl, boolean, undefiniert, NULL), wird der primitive Wert in Zeichenfolge konvertiert und zurückgegeben.
2. Wenn die Methode toString () von der Klasse toString () nicht außer Kraft gesetzt wird, lautet das Rückgabeergebnis des toString () Aufrufs "[Objekt]"; oder die Methode toString () wird überschrieben, aber die Methode gibt das Ergebnis als Objekt zurück. Dann nennt JS die ValueOf () -Methode des Objekts. Wenn das Rückgabeergebnis des Werts von ValueOf () primitiv ist (String, Anzahl, boolean, undefiniert, NULL), wandeln Sie den primitiven Wert in Zeichenfolge um und return.
3. Wenn keiner der oben genannten Punkte erfüllt ist und der primitive Wert nicht erhalten werden kann, indem die Methode des Objekts toString () oder valueOf () aufgerufen wird, wirft JS einen TypenErrorfehler aus.
Die Regel für das automatische Konvertieren von Objekt in die Zahl:
1. Rufen Sie die ValueOf () -Methode des Objekts auf. Wenn der primitive Wert erhalten wird, konvertieren Sie den primitiven Wert in die Zahl und senden Sie ihn zurück.
2. Wenn der primitive Wert nicht aus der ValueOf () -Methode erhalten werden kann, rufen Sie die Methode des Objekts toString () auf. Wenn toString () einen primitiven Wert zurückgibt, konvertieren Sie den primitiven Wert in die Anzahl und Rückgabe.
3. Wenn keiner der beiden oben genannten Punkte nicht erfüllt werden kann, werfen JS einen TypenErrorfehler.
Es ist zu sehen, dass die Regeln für das automatische Konvertieren von Objekten in Zeichenfolge und Objekt in die Nummer tatsächlich gleich sind. Die Differenz ist die Reihenfolge der Aufruf -Methode () und ValueOf () -Methode.
Nach den oben genannten Regeln können einige Konversionsergebnisse gut verstanden werden:
1. Für leere Arrays ist das Ergebnis bei 0,2, dafür, dass die Werte () zuerst aufgerufen wird. Da ValueOf () das Array -Objekt selbst zurückgibt, ruft JS als nächstes die Methode toString () des leeren Arrays auf. Da das Ergebnis des leeren Array toString () in eine leere Zeichenfolge zurückkehrt, wird die leere Zeichenfolge schließlich in eine Nummer 0 konvertiert und zurückgegeben.
2. Wenden Sie für ein Array mit nur einem Zahlenelement dieselbe Regel an, um es in eine Nummer zu konvertieren, und das Endergebnis ist die Zahl.
3.. Für Arrays mit mehreren numerischen Mitgliedern ist das Endergebnis NAN.
Wann müssen Sie in String konvertieren? Wann müssen Sie in die Nummer konvertieren?
Bei der automatischen Konvertierung des Typs in einem Objekt wählt JS je nach Objekttyp und Bediener in die Zeichenfolge oder die Nummer konvertiert. Die spezifischen Regeln sind wie folgt:
1. Wenn ein Objekt auf beiden Seiten des + Operators angezeigt wird, konvertieren Sie das Objekt in eine Zeichenfolge.
2. Alle Objekte (außer Datumsobjekten) werden zuerst in die Nummer konvertiert.
3. Für Datumsobjekte wird die Priorität in String konvertiert.
Es ist erwähnenswert, dass für den + Operator, außer dass Objekte oder Zeichenfolgen auf beiden Seiten des Bedieners erscheinen, der Betrieb von "Konvertit in die Nummer" in anderen Fällen durchgeführt wird. Gleichzeitig hängt dieser Vorgang auch mit der Reihenfolge zwischen Werten zusammen.
Experiment
Die Codekopie lautet wie folgt:
console.log (3 * []); // 0
console.log (3 * [2]); // 6
console.log (3 * [1,2]); // nan
console.log (3 + [2]); // 32
var nun = new Date ();
console.log (jetzt + 1); // Mi 26. März 2014 10:51:39 GMT + 0800 (CST) 1
console.log (jetzt - 1); // 1395802299223
console.log (jetzt * 2); // 2791604598448
console.log (true + true); // 2
console.log (2 + null); // 2, null wird auf 0 konvertiert
console.log (2 + undefined); // nan, undefiniert wird in NAN konvertiert
Konsole.log (1 + 2 + "Katzen"); // 3 Katzen
Konsole.log (1 + (2 + "Katzen)); // 12 Katzen