Während des Schreibvorgangs von JavaScript-Programmen konvertiert JS das Objekt vor der Verarbeitung je nach Kontext automatisch in eine Zahl oder Zeichenfolge. Die Regeln für diese automatische Konvertierung lauten wie folgt:
Regel für die automatische Konvertierung von Objekt in String:
1. Wenn die Klasse, zu der das Objekt gehört, die toString()-Methode überschreibt, rufen Sie diese Methode auf. Wenn das Rückgabeergebnis des toString()-Aufrufs Primitive (Zeichenfolge, Zahl, boolescher Wert, undefiniert, null) ist, wird der Primitive-Wert in einen String konvertiert und zurückgegeben.
2. Wenn die Klasse, zu der das Objekt gehört, die toString()-Methode nicht überschreibt, lautet das Rückgabeergebnis des toString()-Aufrufs „[object Object]“ oder wenn die toString()-Methode überschrieben wird Methode gibt ein Objekt zurück. Dann ruft JS die valueOf()-Methode des Objekts auf. Wenn das Rückgabeergebnis des valueOf()-Aufrufs Primitive (Zeichenfolge, Zahl, Boolescher Wert, undefiniert, null) ist, wird der Primitive-Wert in eine Zeichenfolge konvertiert und zurückgegeben.
3. Wenn keiner der beiden oben genannten Punkte erfüllt ist und der Primitive-Wert nicht durch Aufrufen der toString()-Methode oder valueOf()-Methode des Objekts erhalten werden kann, löst JS einen TypeError aus.
Regel zur automatischen Umwandlung von Objekt in Zahl:
1. Rufen Sie die valueOf()-Methode des Objekts auf. Wenn der erhaltene Wert ein primitiver Wert ist, konvertieren Sie den primitiven Wert in eine Zahl und geben Sie ihn zurück.
2. Wenn der Primitive-Wert nicht von der valueOf()-Methode abgerufen werden kann, rufen Sie die toString()-Methode des Objekts auf. Wenn toString() einen Primitive-Wert zurückgibt, konvertieren Sie den Primitive-Wert in eine Zahl und geben Sie ihn zurück.
3. Wenn keiner der beiden oben genannten Punkte erfüllt ist, gibt JS einen TypeError aus.
Wie Sie sehen können, sind die Regeln für die automatische Konvertierung von Objekten in Zeichenfolgen und für die automatische Konvertierung von Objekten in Zahlen tatsächlich dieselben. Der Unterschied liegt in der Aufrufreihenfolge der Methoden toString() und valueOf().
Gemäß den oben genannten Regeln können einige Konvertierungsergebnisse gut verstanden werden:
1. Bei der Konvertierung eines leeren Arrays in eine Zahl ist das Ergebnis 0. Dies liegt daran, dass die valueOf()-Methode des Arrays zuerst aufgerufen wird. Da valueOf() das Array-Objekt selbst zurückgibt, ruft JS dann die toString()-Methode des leeren Arrays auf, da das Rückgabeergebnis von toString() des leeren ist Das Array ist ein Nullzeichen, daher wird der leere String schließlich in die Zahl 0 umgewandelt und zurückgegeben.
2. Wenden Sie bei einem Array mit nur einem numerischen Element dieselben Regeln an, um es in eine Zahl umzuwandeln, und das Endergebnis ist die Zahl.
3. Da die Zeichenfolge bei Arrays mit mehreren numerischen Elementen nicht in eine Zahl umgewandelt werden kann, ist das Endergebnis NaN.
Wann wird es in einen String umgewandelt? Wann wird es in eine Zahl umgewandelt?
Wenn Sie eine automatische Typkonvertierung für ein Objekt durchführen, wählt JS je nach Objekttyp und Operator die Konvertierung in eine Zeichenfolge oder eine Zahl. Die spezifischen Regeln lauten wie folgt:
1. Wenn ein Objekt auf beiden Seiten des Operators erscheint, konvertieren Sie das Objekt in eine Zeichenfolge.
2. Alle Objekte (außer Datumsobjekte) werden zuerst in Zahlen umgewandelt.
3. Konvertieren Sie Date-Objekte zunächst in einen String.
Es ist zu beachten, dass bei Operatoren, außer wenn Objekte oder Zeichenfolgen auf beiden Seiten des Operators angezeigt werden, in allen anderen Fällen die Operation „In Zahl konvertieren“ ausgeführt wird Ordnung zwischen Werten.
Experimentieren
console.log(3 [2]);//32
var now = new Date();
console.log(now 1);//Mi 26. März 2014 10:51:39 GMT 0800 (CST)1
console.log(now - 1);//1395802299223
console.log(now * 2);//2791604598448
console.log(true true);//2
console.log(2 null);//2, null wird in 0
konvertiert
console.log(2 undefiniert);//NaN, undefiniert wird in NaN
konvertiert
console.log(1 2 "cats");//3 Katzen
console.log(1 (2 "cats"));//12 cats