Heim > Artikel > Web-Frontend > Eine kurze Einführung in die implizite Typkonvertierung von JavaScript-Datentypen_Javascript-Fähigkeiten
JavaScript-Datentypen sind in sechs Typen unterteilt, nämlich null, undefiniert, boolesch, Zeichenfolge, Zahl und Objekt. Objekt ist ein Referenztyp und die anderen fünf sind Basistypen oder primitive Typen. Mit der Methode typeof können wir ausdrucken, zu welchem Typ etwas gehört. Um Variablen unterschiedlichen Typs zu vergleichen, müssen Sie zunächst den Typ konvertieren. Dies wird als Typkonvertierung oder implizite Konvertierung bezeichnet. Implizite Konvertierungen erfolgen üblicherweise mit den Operatoren Addition, Subtraktion, Multiplikation, Division, Gleichheit, Kleiner als, Größer als usw. .
typeof '11' //string typeof(11) //number '11' < 4 //false
In diesem Kapitel wird die implizite Datentypkonvertierung in JavaScript separat vorgestellt. Ein gutes Verständnis davon kann viele Vorgänge in praktischen Anwendungen vereinfachen.
Siehe das folgende Codebeispiel:
var arr = [5]; console.log(arr+"");
Der obige Code ist eine Operation zum impliziten Konvertieren eines Arrays in einen String. Ist das nicht viel einfacher als die folgende Methode:
var arr = [5]; console.log(arr.toString());
Implizite Datentypkonvertierungen wie die oben genannten werden häufig in der tatsächlichen Codierung verwendet.
1. Datentypkonvertierung zwischen Werttypen:
Informationen zu Datentypen in JavaScript finden Sie im Kapitel „Detaillierte Erläuterung der JavaScript-Datentypen“.
(1) Zahlen und Zeichenfolgen verwenden Operatoren:
Wenn Sie den Operator verwenden, um Zahlen und Zeichenfolgen zu bearbeiten, werden die Zahlen zuerst in Zeichenfolgen umgewandelt und dann werden Zeichenfolgenverkettungsoperationen ausgeführt:
var antzone = "antzone"; var num = 8; console.log(antzone+num);
(2). Operatoroperationen mit booleschen Werten:
Wenn es sich um einen booleschen Typ handelt, wird der boolesche Wert zunächst in die entsprechende Zahl oder Zeichenfolge umgewandelt und anschließend die entsprechende Zeichenfolgenverbindung oder arithmetische Operation ausgeführt.
var bool = true; var num = 8; console.log(bool + num);
Der obige Code wandelt zuerst true in die Zahl 1 um und führt dann eine arithmetische Addition durch.
var bool = true; var num = "8"; console.log(bool + num);
Der obige boolesche Wert wird in die entsprechende Zeichenfolgenform „true“ konvertiert und anschließend wird eine Zeichenfolgenverkettung durchgeführt.
(3). Subtraktionsoperation:
Wenn eine Subtraktionsoperation ausgeführt wird, werden zuerst beide Operanden in Zahlen umgewandelt und dann wird die arithmetische Operation ausgeführt:
var bool = true; var num = "8"; console.log(bool - num);
true wird in die Zahl 1 umgewandelt, die Zeichenfolge „8“ wird in die Zahl 8 umgewandelt und dann werden arithmetische Operationen ausgeführt.
Das Gleiche gilt für die Umrechnungen von Multiplikation, Division, Größer als, Kleiner als und Subtraktion, daher werde ich keine Beispiele mehr nennen.
(4).==Gleichheitsoperation:
undefiniert und null sind etwas Besonderes. Sie verwenden beide den ==-Operator, um true zurückzugeben.
console.log(undefined==null);
Beim Vergleich mit anderen Werttypen werden die Operanden in Zahlen umgewandelt
console.log("3"==3);
Der obige Code wandelt die Zeichenfolge „3“ in eine Zahl um und vergleicht sie dann.
console.log("1"==true);
Der obige Code wandelt „1“ und „true“ jeweils in Zahlen um und vergleicht sie dann.
2. Referenztyp in Werttyp konvertieren:
Das Konvertieren von Referenztypen (Objekten) in Werttypen ist viel komplizierter. Die Verteilung wird unten vorgestellt.
Die beiden Methoden der Objektvererbung können uns helfen, die Konvertierungsfunktion vom Objekt- in den Werttyp zu realisieren:
(1).toString() Methode.
(2).valueOf() Methode.
Normalerweise gehen wir davon aus, dass Sie zum Konvertieren eines Objekts in eine Zeichenfolge die Methode toString() aufrufen müssen und zum Konvertieren eines Objekts in eine Zahl die Methode valueOf() aufrufen müssen, aber das ist nicht der Fall einfach, wenn es tatsächlich angewendet wird. Siehe das folgende Codebeispiel:
var obj = { webName: "脚本之家", url:"softwhy.com" } console.log(obj.toString());
Wie aus dem obigen Code ersichtlich ist, konvertiert die toString()-Methode das Objekt nicht in einen String, der dieses Objekt widerspiegelt.
var arr = [1, 2, 3]; console.log(arr.valueOf());
Wie aus dem obigen Code ersichtlich ist, wandelt die Methode valueOf() das Objekt nicht in eine Zahl um, die dieses Objekt widerspiegelt.
var arr = [1, 2, 3]; console.log(arr.toString());
数组对象的toString()方法能够将数组转换为能够反映此数组对象的字符串。
总结如下:
(1).有些对象只是简单继承了toString()或者valueOf()方法,比如第一个例子。
(2).有些对象则不但是继承了两个方法,而且还进行了重写。
所以有些对象的方法能够达成转换成字符串或者数字的目标,有些则不能。
调用toString()或者valueOf()将对象转换成字符串或者数字的规则如下:
调用toString()时,如果对象具有这个方法,则调用此方法;如果此方法返回一个值类型数据,那么就返回这个值类型数据,然后再根据所处的上下文环境进行相关数据类型转换。如果没有toString(),或者此方法返回值并不是一个值类型数据,那么就会调用valueOf()(如果此方法存在的话),如果valueOf()返回一个值类型数据,那么再根据所处的上下文环境进行相关的数据类型转换。
进一步说明:
(1).上面介绍了通常默认情况下valueOf()和toString()方法的作用(将对象转换为数字或者字符串),但是需要注意的是,这并不是硬性规定,也就是说并不是valueOf()方法必须要返回数字或者toString()方法必须要转换为字符串,比如简单继承的这两个方法就无法进行实现转换为数字和字符串的功能,再比如,我们可以自己称谢这两个方法,返回值也没有必要是数字或者字符串。
(2).还有需要特别注意的一点就是,很多朋友认为,转换为字符串首先要调用toString()方法, 其实这是错误的认识,我们应该这么理解,调用toString()方法可以转换为字符串,但不一定转换字符串就是首先调用toString()方法。
看如下代码实例:
var arr = []; arr.valueOf = function () { return "1"; } arr.toString = function () { return "2"; } console.log(arr + "1");
上面的代码中,arr是要被转换为字符串的,但是很明显是调用的valueOf()方法,而没有调用toString()方法。有些朋友可能会有这样的质疑,难道[2]这样的数字转换成字符串"2",不是调用的toString()方法吗。
代码如下:
var arr = [2]; console.log(arr + "1");
其实过程是这样的,首先arr会首先调用valueOf()方法,但是数字的此方法是简单继承而来,并没有重写(当然这个重写不是我们实现),返回值是数组对象本身,并不是一个值类型,所以就转而调用toString()方法,于是就实现了转换为字符串的目的。
总结如下:
大多数对象隐式转换为值类型都是首先尝试调用valueOf()方法。但是Date对象是个例外,此对象的valueOf()和toString()方法都经过精心重写,默认是调用toString()方法,比如使用+运算符,如果在其他算数运算环境中,则会转而调用valueOf()方法。
代码实例如下:
var date = new Date(); console.log(date + "1"); console.log(date + 1); console.log(date - 1); console.log(date * 1);
以上内容是小编给大家介绍的JavaScript数据类型之隐式类型转换的全部内容,希望大家喜欢。