Typkonvertierung in ECMAScript

Eine der wichtigsten Eigenschaften aller Programmiersprachen ist die Fähigkeit, Typkonvertierungen durchzuführen.

ECMAScript bietet Entwicklern eine Vielzahl einfacher Typkonvertierungsmethoden.

Die meisten Typen haben Methoden zur einfachen Konvertierung, und einige globale Methoden können für komplexere Konvertierungen verwendet werden. In jedem Fall ist die Typkonvertierung in ECMAScript ein kurzes Schrittbefehl.

Umwandlung in einen String

Der interessante Punkt an den primitiven Werten von ECMAScript (Boolean, Number und String) ist, dass sie Pseudo-Objekte sind, was bedeutet, dass sie tatsächlich Attribute und Methoden haben.

Beispielsweise kann die Länge eines Strings wie folgt ermittelt werden:

var sColor = "red";
alert(sColor.length); // Ausgabe "3"

Obwohl "red" ein primitiver String-Typ ist, verfügt er dennoch über das Attribut length, um die Größe des Strings zu speichern.

Zusammenfassend lässt sich sagen, dass die drei Hauptarten der primitiven Typen Boolean-Werte, Zahlen und Strings alle eine toString() -Methode haben, mit der ihre Werte in Strings umgewandelt werden können.

Hinweis:Vielleicht fragen Sie sich, „Hat der String auch eine toString() -Methode, ist das nicht überflüssig?“ Ja, das ist wahr, ECMAScript definiert, dass alle Objekte eine toString() -Methode haben, egal ob es sich um ein Pseudo-Objekt oder ein echtes Objekt handelt. Da der String-Typ ein Pseudo-Objekt ist, verfügt er sicherlich über eine toString() -Methode.

Die Methode toString() des Boolean-Typs gibt einfach "true" oder "false" aus, der Ergebnis wird durch den Wert der Variable bestimmt:

var bFound = false;
alert(bFound.toString());	//Ausgabe "false"

Die Methode toString() des Number-Typs ist besonders, da sie zwei Modi hat, nämlichStandardmodusundBasismuster。Im Standardmodus gibt die Methode toString() einfach die entsprechende Zeichenkette der numerischen Werte aus (ob Ganzzahl, Fließkomma oder wissenschaftliche Notation), wie folgt:

var iNum1 = 10;
var iNum2 = 10.0;
alert(iNum1.toString());	//Ausgabe "10"
alert(iNum2.toString());	//Ausgabe "10"

Anmerkung:Im Standardmodus gibt die Methode toString() des Number-Typs immer die dezimale Darstellung der Zahl zurück, unabhängig davon, in welcher Darstellung die Zahl ursprünglich deklariert wurde. Daher werden Zahlen, die in Form von oktaler oder hexadezimaler Literal angegeben werden, immer in dezimaler Form ausgegeben.

Mit dem Basismuster der Methode toString() des Number-Typs können verschiedeneBasisGeben Sie eine Zahl aus, z.B. die Basis für binäre ist 2, die Basis für oktale ist 8, die Basis für hexadezimale ist 16.

BasisEs ist nur eine andere Addition, die in die Basis umzuwandeln ist, und es ist ein Parameter der Methode toString():

var iNum = 10;
alert(iNum.toString(2));	//Ausgabe "1010"
alert(iNum.toString(8));	//Ausgabe "12"
alert(iNum.toString(16));	//Ausgabe "A"

Im obigen Beispiel wurde die Zahl 10 in drei verschiedenen Formen ausgegeben, nämlich in binärem, oktalischem und hexadezimalem Format. HTML verwendet Hexadezimalzahlen zur Darstellung jeder Farbe, was bei der Verarbeitung von Zahlen in HTML sehr nützlich ist.

Anmerkung:Der Aufruf von toString(10) für Zahlen ist gleich dem Aufruf von toString(), sie geben beide die dezimale Form der Zahl zurück.

Siehe:

Siehe JavaScript ReferenzhandbuchGeben Sie detaillierte Informationen über die Methode toString() an:

Convert to number

ECMAScript provides two methods to convert non-numeric primitive values to numbers, that is, parseInt() and parseFloat().

As you might expect, the former converts the value to an integer, and the latter converts the value to a floating-point number. These methods can only run correctly when called on String types; when called on other types, they return NaN.

parseInt()

Before determining if a string is a numeric value, parseInt() and parseFloat() both carefully analyze the string.

The parseInt() method first checks the character at position 0 to determine if it is a valid digit; if not, the method returns NaN and stops further execution. But if the character is a valid digit, the method will check the character at position 1 and perform the same test. This process will continue until a non-valid digit character is found, at which point parseInt() will convert the string before that character to a number.

For example, if you want to convert the string "12345red" to an integer, parseInt() will return 12345, because when it detects the character r, it stops the detection process.

Numeric literals contained in strings are correctly converted to numbers, for example, "0xA" is correctly converted to the number 10. However, the string "22.5" will be converted to 22, because the decimal point is an invalid character for integers.

Here are some examples:

var iNum1 = parseInt("12345red");	//returns 12345
var iNum1 = parseInt("0xA");	//returns 10
var iNum1 = parseInt("56.9");	//returns 56
var iNum1 = parseInt("red");	//returns NaN

The parseInt() method also has a base mode, which can convert strings of binary, octal, hexadecimal, or any other base into integers. The base is specified by the second parameter of parseInt(), so to parse hexadecimal values, you need to call the parseInt() method as follows:

var iNum1 = parseInt("AF", 16);	//returns 175

Of course, you can call the parseInt() method in this way for binary, octal, even decimal (default mode):

var iNum1 = parseInt("10", 2);	//returns 2
var iNum2 = parseInt("10", 8);	// gibt 8 zurück
var iNum3 = parseInt("10", 10);	// gibt 10 zurück

Wenn eine Dezimalzahl führende Nullen enthält, ist es besser, die Basis 10 zu verwenden, um eine versehentliche oktale Wertinterpretation zu vermeiden. Zum Beispiel:

var iNum1 = parseInt("010");	// gibt 8 zurück
var iNum2 = parseInt("010", 8);	// gibt 8 zurück
var iNum3 = parseInt("010", 10);	// gibt 10 zurück

In diesem Code wird die Zeichenkette "010" von beiden Zeilen als Zahl interpretiert. Die erste Zeile betrachtet diese Zeichenkette als oktalen Wert und interpretiert sie auf ähnliche Weise wie die zweite Zeile (Basis 8). Die letzte Zeile gibt die Basis als 10 an, daher beträgt iNum3 am Ende 10.

Siehe

Siehe JavaScript ReferenzhandbuchHier sind detaillierte Informationen zur Methode parseInt():parseInt().

parseFloat()

Die Methode parseFloat() behandelt auf ähnliche Weise wie parseInt(), indem sie jeden Zeichen von Position 0 aus betrachtet, bis sie den ersten ungültigen Zeichen findet und die Zeichenkette bis zu diesem Zeichen in eine Zahl konvertiert.

Allerdings ist für diese Methode der erste auftretende Dezimalpunkt ein gültiges Zeichen. Hat die Zeichenkette zwei Dezimalpunkte, wird der zweite als ungültig betrachtet. parseFloat() konvertiert die Zeichen vor dem Dezimalpunkt in eine Zahl. Dies bedeutet, dass die Zeichenkette "11.22.33" in 11.22 interpretiert wird.

Eine weitere Unterschied bei der Verwendung der Methode parseFloat() ist, dass die Zeichenkette in dezimaler Form die Fließkommazahlen darstellen muss, nicht in oktal oder hexadezimal. Diese Methode ignoriert führende Nullen, daher wird die oktale Zahl 0102 in 102 interpretiert. Für die hexadezimale Zahl 0xA gibt diese Methode NaN zurück, da x in Fließkommazahlen kein gültiges Zeichen ist. (Anmerkung:Getestet wurde, dass spezifische Browser-Implementierungen 0 zurückgeben, anstatt NaN.)

Außerdem hat die Methode parseFloat() kein Basismuster.

Hier sind einige Beispiele für die Verwendung der Methode parseFloat():

var fNum1 = parseFloat("12345red");	// gibt 12345 zurück
var fNum2 = parseFloat("0xA");	// gibt NaN zurück
var fNum3 = parseFloat("11.2");	// gibt 11.2 zurück
var fNum4 = parseFloat("11.22.33");	// gibt 11.22 zurück
var fNum5 = parseFloat("0102"); // gibt 102 zurück
var fNum1 = parseFloat("red"); // gibt NaN zurück

Probieren Sie es selbst aus

Siehe

Siehe JavaScript ReferenzhandbuchHier sind detaillierte Informationen zur Function parseFloat():parseFloat().

Zwangsübersetzung

Man kann auchZwangsübersetzung (type casting)um die Typen von Konvertierungswerten zu verarbeiten. Mit Zwangsübersetzung kann man spezifische Werte zugänglich machen, selbst wenn sie ein anderes Typ sind.

Anmerkung des Herausgebers:Der Begriff "cast" bedeutet "Gießen" und passt gut zur Bedeutung von "Zwangsübersetzung".

In ECMAScript verfügbare 3 Arten von Zwangsübersetzungen sind wie folgt:

  • Boolean(value) - Konvertiert den angegebenen Wert in einen Boolean-Typ;
  • Number(value) - Konvertiert den angegebenen Wert in eine Zahl (kann ein Ganzzahl oder ein Fließkomma sein);
  • String(value) - Konvertiert den angegebenen Wert in einen String;

Durch die Verwendung einer dieser Funktionen wird ein neuer Wert erstellt, der den direkt aus dem ursprünglichen Wert konvertierten Wert speichert. Dies kann unerwartete Konsequenzen haben.

Die Function Boolean()

Wenn der zu konvertierende Wert eine Zeichenkette mit mindestens einem Zeichen, eine nicht null Zahl oder ein Objekt ist, gibt die Function Boolean() true zurück. Wenn der Wert eine leere Zeichenkette, die Zahl 0, undefined oder null ist, gibt sie false zurück.

Man kann die folgenden Codezeilen verwenden, um die Zwangsübersetzung von Boolean-Typen zu testen:

var b1 = Boolean(""); //false - Leere Zeichenkette
var b2 = Boolean("hello"); //true - Nicht leere Zeichenkette
var b1 = Boolean(50); //true - Nicht null
var b1 = Boolean(null); //false - null
var b1 = Boolean(0); //false - Null
var b1 = Boolean(new object()); //true - Objekt

Die Function Number()

Die强制类型转换函数Number() funktioniert ähnlich wie parseInt() und parseFloat(), nur dass sie den gesamten Wert konvertiert, nicht nur einen Teil.

Denken Sie daran, dass die Methoden parseInt() und parseFloat() nur den Teil der Zeichenkette vor dem ersten ungültigen Zeichen konvertieren, daher wird "1.2.3" entsprechend in "1" und "1.2" konvertiert.

Durch die explizite Typkonvertierung mit Number(), wird "1.2.3" NaN zurückgeben, da der gesamte String-Wert nicht in eine Zahl umgewandelt werden kann. Wenn der String-Wert vollständig umgewandelt werden kann, wird Number() bestimmen, ob die Methode parseInt() oder parseFloat() aufgerufen wird.

Die folgende Tabelle erläutert, was passiert, wenn die Methode Number() auf verschiedene Werte angewendet wird:

Verwendung Ergebnis
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number("1.2") 1.2
Number("12") 12
Number("1.2.3") NaN
Number(new object()) NaN
Number(50) 50

String() Funktion

Die einfachste Methode zur expliziten Typkonvertierung ist String(), da sie jeden Wert in einen String umwandeln kann.

Um diese explizite Typkonvertierung durchzuführen, muss einfach die Methode toString() des übergebenen Wertes aufgerufen werden, d.h. 12 in "12" umwandeln, true in "true" umwandeln, false in "false" umwandeln und so weiter.

Der einzige Unterschied zwischen der expliziten Typkonvertierung in einen String und dem Aufruf der Methode toString() besteht darin, dass die explizite Typkonvertierung von null und undefined-Werten einen String erzeugen kann, ohne einen Fehler auszulösen:

var s1 = String(null);	//"null"
var oNull = null;
var s2 = oNull.toString();	//Führt zu einem Fehler

Bei der Verarbeitung von Schwachtypsprachen wie ECMAScript ist die explizite Typkonvertierung sehr nützlich, aber es sollte sichergestellt werden, dass der Wert korrekt ist.