Heim > Web-Frontend > js-Tutorial > Eine kurze Diskussion zur impliziten Typkonvertierung in JavaScript

Eine kurze Diskussion zur impliziten Typkonvertierung in JavaScript

黄舟
Freigeben: 2017-03-15 14:53:24
Original
1494 Leute haben es durchsucht

Der

-Datentyp von JavaScript ist in sechs Typen unterteilt, nämlich null, undefiniert, boolesch, Zeichenfolge, Zahl, Objekt. Objekt ist ein Referenztyp und die anderen fünf Typen von sind Basistypen oder primitive Typen. Mit der Methode typeof können wir ausdrucken, zu welchem ​​Typ etwas gehört. Um Variablen verschiedener Typen zu vergleichen, müssen Sie zuerst den Typ konvertieren, was als Typkonvertierung bezeichnet wird. Implizite Konvertierungen erfolgen normalerweise mit den -Operatoren Addition, Subtraktion, Multiplikation, Division, Gleichheit und Kleiner als, Größer als usw. .

typeof '11'  //string       
typeof(11)  //number
&#39;11&#39; < 4     //false
Nach dem Login kopieren

Konvertierung von Grundtypen

Lass uns zuerst über Addition, Subtraktion, Multiplikation und Division sprechen:

1.StringsZahlen hinzufügen, die Zahl wird in eine Zeichenfolge umgewandelt.

2. Subtrahiere die Zeichenfolge von der Zahl und wandele die Zeichenfolge in eine Zahl um. Wenn die Zeichenfolge keine reine Zahl ist, wird sie in NaN konvertiert. Das Gleiche gilt für Zeichenfolgen minus Zahlen. Durch die Subtraktion zweier Zeichenfolgen werden diese ebenfalls zunächst in Zahlen umgewandelt.

3. Das Gleiche gilt für Umrechnungen von Multiplikation, Division, Größer als, Kleiner als und Subtraktion.

//隐式转换 + - * == / 
// + 
10 + &#39;20&#39;    //2010
// -
10 - &#39;20&#39;    //-10
10 - &#39;one&#39;   //NaN
10 - &#39;100a&#39;  //NaN
// *
10*&#39;20&#39;      //200
&#39;10&#39;*&#39;20&#39;    //200
// /
20/&#39;10&#39;      //2
&#39;20&#39;/&#39;10&#39;    //2
&#39;20&#39;/&#39;one&#39;  //NaN
Nach dem Login kopieren

Werfen wir einen Blick auf einen anderen Satz von ==.

1. undefiniert ist gleich null

Wenn Sie Zeichenfolgen und Zahlen vergleichen, konvertieren Sie Zeichenfolgen in Zahlen

Konvertieren Sie beim Vergleich von Zahlen einen Booleschen Wert

4. Konvertieren Sie beim Vergleich von Zeichenfolgen und Booleschen Werten die beiden in Zahlen

// ==
undefined == null;    //true
&#39;0&#39; == 0;            //true,字符串转数字
0 == false;           //true,布尔转数字
&#39;0&#39; == false;       //true,两者转数字
null == false;       //false
undefined == false;  //false
Nach dem Login kopieren

Konvertierung von Referenztypen

Der Vergleich zwischen Grundtypen ist relativ einfach . Der Vergleich zwischen Referenztypen und Basistypen ist relativ kompliziert. Zunächst muss der Referenztyp in einen Basistyp umgewandelt und dann gemäß der oben genannten Methode verglichen werden. In Boolean konvertierte Referenztypen sind alle wahr. Beispielsweise ist ein leeres Array, solange es ein Objekt ist, ein Referenztyp, also ist [] wahr. Um einen Referenztyp in eine Zahl oder einen String umzuwandeln, verwenden Sie valueOf() oder toString(); das Objekt selbst erbt valuOf() und toString(), und Sie können auch valueOf() und toString( ). Verwenden Sie je nach Objekt den geerbten valueOf(), um es in einen String, eine Zahl oder sich selbst zu konvertieren, und das Objekt muss mit toString in einen String konvertiert werden. Allgemeine Objekte rufen standardmäßig valueOf() auf.

1. Wenn Sie ein Objekt in eine Zahl konvertieren, rufen Sie valueOf(); auf.

2. Wenn Sie ein Objekt in eine Zeichenfolge konvertieren, rufen Sie toString(); auf.

Erster Blick im folgenden Beispiel:

0 == [];        // true, 0 == [].valueOf(); -> 0 == 0;
&#39;0&#39; == [];      // false, &#39;0&#39; == [].toString(); -> &#39;0&#39; == &#39;&#39;;
2 == [&#39;2&#39;];     // true, 2 == [&#39;2&#39;].valueOf(); -> 2 == &#39;2&#39; -> 2 == 2;
&#39;2&#39; == [2];     // true, &#39;2&#39; == [2].toString(); -> &#39;2&#39; ==&#39;2&#39;;

[] == ![];      //true, [].valueOf() == !Boolean([]) -> 0 == false -> 0 == 0;
Nach dem Login kopieren

Wenn das Objekt in eine Zahl umgewandelt wird, wird valueOf() aufgerufen. Davor wird toString() aufgerufen, also ist die valueOf-Methode vermutlich so. Daher sollte das obige Beispiel 0 == [] in das folgende geändert werden, was sinnvoller ist. In jedem Fall wird [] schließlich in 0 umgewandelt.

var valueOf = function (){
    var str = this.toString();    //先调用toString(),转成字符串
    //...
}
0 == [];        // true, 0 == [].valueOf(); -> 0 == &#39;0&#39; -> 0 == 0;
Nach dem Login kopieren

Benutzerdefinierte valueOf() und toString();

1. Benutzerdefinierte valueOf() und toString() sind beide vorhanden und valueOf() wird standardmäßig aufgerufen;

2. Wenn nur toString() vorhanden ist, rufen Sie toString(); auf.

var a = [1];

a.valueOf = function (){ return 1;}
a.toString = function (){ return &#39;1&#39;;}

a + 1;         // 2, valueOf()先调用
Nach dem Login kopieren

Das Entfernen von valueOf() führt zum Aufruf von toString().

var a = [1];

a.valueOf = function (){ return 1;}
a.toString = function (){ return &#39;1&#39;;}

a + 1;         // 2, 先调用valueOf()
//去掉valueOf
delete a.valueOf;
a + 1;        // &#39;11&#39;, 调用toString()
Nach dem Login kopieren

Was passiert, wenn Sie etwas anderes zurückgeben?

var a = [1];

a.valueOf = function (){return ;}
a.toString = function (){return 1 ;};

1 - a;        //NaN
Nach dem Login kopieren

Andere Objekte rufen valueOf() auf, um in verschiedene Typen zu konvertieren:

var a = {};
a.valueOf();    //Object {}
var a = [];
a.valueOf();    //[]    自己本身
var a = new Date();
a.valueOf();    //1423812036234  数字
var a = new RegExp();
a.valueOf();    //    /(?:)/  正则对象
Nach dem Login kopieren

Der Vergleich zwischen Referenztypen ist der Vergleich von Speicheradressen, und hier ist keine implizite Konvertierung erforderlich Nicht viel zu sagen.

[] == []  //false 地址不一样

var a = [];
b = a;
b == a   //true
Nach dem Login kopieren

Explizite Konvertierung

Die explizite Konvertierung ist relativ einfach. Sie können die Klasse direkt als Methode zur direkten Konvertierung verwenden.

Number([]);        //0
String([]);        //&#39;&#39;
Boolean([]);       //true
Nach dem Login kopieren

Es gibt eine einfachere Konvertierungsmethode.

3 + &#39;&#39;    // 字符串&#39;3&#39;
+&#39;3&#39;      // 数字3
!!&#39;3&#39;     // true
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion zur impliziten Typkonvertierung in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage