Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erläuterung der Anwendungsbeispiele für die Konvertierung von JavaScript-Werttypen und Referenztypen

Ausführliche Erläuterung der Anwendungsbeispiele für die Konvertierung von JavaScript-Werttypen und Referenztypen

伊谢尔伦
伊谢尔伦Original
2017-07-18 16:26:401635Durchsuche

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 bezeichnet und wird auch als implizite Konvertierung bezeichnet. Implizite Konvertierungen erfolgen üblicherweise mit den Operatoren Addition, Subtraktion, Multiplikation, Division, Gleichheit, Kleiner als, Größer als usw. .

1. Datentypkonvertierung zwischen Werttypen:

Informationen zu Datentypen in JavaScript finden Sie in der detaillierten Erläuterung der JavaScript-Datentypen 1 Kapitel.

(1). Zahlen und Zeichenfolgen verwenden den +-Operator:

Wenn Zahlen und Zeichenfolgen zur Operation den +-Operator verwenden, werden die Zahlen zunächst in Zeichenfolgen umgewandelt. und führen Sie dann eine Zeichenfolgenverkettungsoperation aus:


var antzone = "antzone";
var num = 8;
console.log(antzone+num);

(2 + Operatoroperation mit booleschen Werten:

Wenn vorhanden). Handelt es sich um einen booleschen Typ, wird zunächst der boolesche Wert in die entsprechende Zahl oder Zeichenfolge konvertiert und anschließend die entsprechende Zeichenfolgenverbindung bzw. Rechenoperation ausgeführt.


var bool = true;
var num = 8;
console.log(bool + num);

Der obige Code konvertiert zuerst true in die Zahl 1 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 die Zeichenfolgenverkettung durchgeführt.

(3). Subtraktionsoperation:

Wenn eine Subtraktionsoperation ausgeführt wird, werden zuerst beide Operanden in Zahlen umgewandelt und dann werden arithmetische Operationen 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 Multiplikation, Division, Größer als, Kleiner als und Subtraktion, daher werde ich keine Beispiele mehr nennen.

(4).==Gleichheitsoperation:

undefiniert und null sind speziell. Sie verwenden beide den ==-Operator, um true zurückzugeben.


console.log(undefined==null);

Beim Vergleich anderer Werttypen werden die Operanden in Zahlen umgewandelt


console.log("3"==3);

Die 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:

Referenztyp (Objekt) in Werttyp konvertieren ist viel komplizierter 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 müssen Sie jedoch die Methode valueOf() aufrufen. Es ist nicht so einfach, wenn es tatsächlich angewendet wird:


var obj = {
 webName: "phpcn",
 url:"php.cn"
}
console.log(obj.toString());

Wie Sie dem obigen Code entnehmen können, ist dies bei der toString()-Methode der Fall Konvertieren Sie das Objekt nicht in eine Zeichenfolge, die dieses Objekt widerspiegelt.


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

Wie Sie dem obigen Code entnehmen können, wandelt die Methode valueOf() das Objekt nicht in eine Zahl um, die dieses Objekt widerspiegelt.


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

Die toString()-Methode des Array-Objekts kann das Array in einen String konvertieren, der dieses Array-Objekt widerspiegelt.

wird wie folgt zusammengefasst:

(1) Einige Objekte erben einfach die Methode toString() oder valueOf(), z Erstes Beispiel.
(2). Einige Objekte erben nicht nur zwei Methoden, sondern schreiben sie auch neu.

Daher können einige Objektmethoden das Ziel der Konvertierung in Zeichenfolgen oder Zahlen erreichen, andere nicht.

Die Regeln für den Aufruf von toString() oder valueOf() zum Konvertieren eines Objekts in eine Zeichenfolge oder Zahl lauten wie folgt:

Wenn das Objekt beim Aufruf von toString() über diese Methode verfügt, wird dies angezeigt Die Methode wird aufgerufen. Wenn diese Methode Daten vom Werttyp zurückgibt, werden diese Daten vom Werttyp zurückgegeben und anschließend wird die entsprechende Datentypkonvertierung entsprechend dem Kontext durchgeführt. Wenn toString() nicht vorhanden ist oder der Rückgabewert dieser Methode keine Daten vom Werttyp ist, wird valueOf() aufgerufen (falls diese Methode vorhanden ist). Wenn valueOf() Daten vom Typ Wert zurückgibt, dann gemäß Kontextumgebung, um relevante Datentypkonvertierungen durchzuführen.

Weitere Erklärung:

(1) Oben werden standardmäßig die Funktionen der Methoden valueOf() und toString() vorgestellt (Konvertieren von Objekten in Zahlen oder Zeichenfolgen), aber Sie müssen darauf achten Die Sache ist, dass dies keine feste Regel ist, das heißt, die Methode valueOf() darf keine Zahl zurückgeben oder die Methode toString() muss in einen String konvertiert werden. Diese beiden einfach geerbten Methoden können dies beispielsweise nicht in Zahlen umgewandelt werden und Die Funktion von Zeichenfolgen, ein weiteres Beispiel: Wir können diese beiden Methoden selbst verwenden, und der Rückgabewert muss keine Zahl oder Zeichenfolge sein.

(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);

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Anwendungsbeispiele für die Konvertierung von JavaScript-Werttypen und Referenztypen. 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