Konvertieren von Datentypen in JavaScript. JavaScript: Datentypkonvertierung zur Sortierung

24.08.2023
| |

JavaScript unterteilt Daten in Typen, wodurch Sie Daten gruppieren und bestimmen können, welche Werte zugewiesen und welche Vorgänge ausgeführt werden können.

Obwohl JavaScript aufgrund der Typumwandlung viele Werte automatisch konvertiert, ist es am besten, Datentypen manuell zu konvertieren, um die erwarteten Ergebnisse zu erzielen.

In diesem Tutorial erfahren Sie, wie Sie primitive Typen konvertieren JavaScript-Daten, einschließlich Zahlen, Zeichenfolgen und booleschen Elementen.

Implizite Konvertierung

Die Programmiersprache JavaScript ist sehr gut im Umgang mit unerwarteten Werten. JavaScript lehnt unerwartete Werte nicht ab, sondern versucht vielmehr, sie zu konvertieren. Diese implizite Konvertierung wird auch Typzwang genannt.

Bestimmte Methoden konvertieren Werte automatisch, um sie zu verwenden. Die Methode „alert()“ verwendet einen String als Parameter und konvertiert andere Typen automatisch in Strings. Sie können dieser Methode also einen numerischen Wert übergeben:

Wenn Sie diesen String ausführen, gibt der Browser ein Popup mit dem Wert 8,5 zurück, der bereits in einen String konvertiert ist.

Durch die Verwendung von Zahlenfolgen zusammen mit mathematischen Operatoren werden Sie feststellen, dass JavaScript Werte verarbeiten kann, indem es Zeichenfolgen implizit in Zahlen umwandelt:

// Subtraktion
"15" - "10";
5
// Modul
"15" % "10";
5

Aber nicht alle Betreiber arbeiten vorhersehbar. Dies gilt insbesondere für den +-Operator: Er führt die Addition von Zahlen und die Verkettung von Zeichenfolgen durch.

// Beim Arbeiten mit Strings führt + eine Verkettung durch
"2" + "3";
"23"

Da der +-Operator viele Verwendungsmöglichkeiten hat, behandelt er in diesem Beispiel die Werte 2 und 3 als Zeichenfolgen, obwohl sie als numerische Zeichenfolgen ausgedrückt werden. Daher kombiniert er die Zeichenfolgen „2“ und „3“ und erhält 23, anstatt 2 und 3 zu addieren und 5 zu erhalten.

Solche Mehrdeutigkeiten treten im Code auf und führen manchmal zu unerwarteten Ergebnissen. Daher ist es besser, Datentypen wann immer möglich explizit zu konvertieren. Dies hilft bei der Codepflege und Fehlerbehandlung.

Konvertieren von Werten in Zeichenfolgen

Um einen Wert explizit in einen String umzuwandeln, rufen Sie die Methode String() oder n.toString() auf.

Versuchen Sie, den booleschen Wert true mit String() in einen String umzuwandeln.

Dadurch wird das String-Literal „true“ zurückgegeben.

Sie können auch versuchen, der Funktion eine Zahl zu übergeben:

Es wird ein String-Literal zurückgegeben:

Versuchen Sie nun, String() mit einer Variablen zu verwenden. Weisen Sie der Odyssey-Variablen einen numerischen Wert zu und verwenden Sie den Operator „typeof“, um den Typ zu überprüfen.

sei Odyssee = 2001;
console.log(typeof odyssey);
Nummer

An dieser Moment Der Variablen Odyssee wird der numerische Wert 2001 zugewiesen. Der Operator „typeof“ bestätigt, dass der Wert eine Zahl ist.

Weisen Sie nun die Odyssey-Variable ihrem Äquivalent innerhalb der String()-Funktion zu und verwenden Sie dann typeof, um sicherzustellen, dass der Wert der Variablen erfolgreich von einer Zahl in einen String konvertiert wird.

odyssee = String(odyssee); // „2001“
console.log(typeof odyssey);
Zeichenfolge

Wie Sie sehen können, enthält die Odyssey-Variable jetzt einen String.

Die Funktion n.toString() funktioniert auf ähnliche Weise. Ersetzen Sie n durch eine Variable.

Schläge lassen = 400;
blows.toString();

Die Variable blows enthält die Zeichenfolge.

Anstelle einer Variablen können Sie auch einen Wert in Klammern setzen:

(1776).toString(); // gibt „1776“ zurück
(false).toString(); // gibt „false“ zurück
(100 + 200).toString(); // gibt „300“ zurück

String() und n.toString() konvertieren explizit Boolean und numerische Werte in Zeilen.

Werte in Zahlen umwandeln

Die Methode Number() kann einen Wert in eine Zahl umwandeln. Oft besteht die Notwendigkeit, aus Zahlen bestehende Zeichenfolgen zu konvertieren, aber manchmal müssen auch boolesche Werte konvertiert werden.

Übergeben Sie beispielsweise die folgende Zeichenfolge an die Number()-Methode:

Die Zeichenfolge wird in eine Zahl umgewandelt und nicht mehr in Anführungszeichen gesetzt.

Sie können einer Variablen auch eine Zeichenfolge zuweisen und diese dann konvertieren.

lass Dalmatiner = „101“;
Zahl(Dalmatiner);
101

Das String-Literal „101“ wurde in die Zahl 101 umgewandelt.

Leerzeichenfolgen oder Leerzeichenfolgen werden in die Zahl 0 umgewandelt.

Nummer(" "); // gibt 0 zurück
Nummer(""); // gibt 0 zurück

Beachten Sie, dass Zeichenfolgen, die nicht aus Zahlen bestehen, in NaN konvertiert werden, was „Keine Zahl“ bedeutet. Dies gilt auch für durch Leerzeichen getrennte Zahlen.

Number("zwölf"); // gibt NaN zurück
Zahl("20.000"); // gibt NaN zurück
Zahl("2 3"); // gibt NaN zurück
Zahl("11-11-11"); // gibt NaN zurück

In booleschen Daten ist „falsch“ 0 und „wahr“ 1.

Konvertieren von Werten in boolesche Werte

Um Zahlen oder Strings in boolesche Werte umzuwandeln, wird die Methode Boolean() verwendet. Es hilft beispielsweise festzustellen, ob der Benutzer Daten in ein Textfeld eingibt oder nicht.

Jeder Wert, der als leer interpretiert wird, z. B. die Zahl 0, die leere Zeichenfolge, undefiniert, NaN oder null, wird in „false“ konvertiert.

Boolean(0); // gibt false zurück
Boolean(""); // gibt false zurück
Boolean(undefiniert); // gibt false zurück
Boolean(NaN); // gibt false zurück
Boolean(null); // gibt false zurück

Andere Werte, einschließlich Zeichenfolgenliterale, die aus Leerzeichen bestehen, werden in „true“ konvertiert.

Boolean(2000); // gibt true zurück
Boolean(" "); // gibt true zurück
Boolean("Maniacs"); // gibt true zurück

Beachten Sie, dass das String-Literal „0“ in „true“ konvertiert wird, da es sich nicht um einen leeren Wert handelt:

Boolean("0"); // gibt true zurück

Durch die Konvertierung von Zahlen und Zeichenfolgen in boolesche Werte können Daten binär ausgewertet und zur Steuerung des Programmflusses verwendet werden.

Abschluss

Jetzt wissen Sie, wie JavaScript Datentypen konvertiert. Typumwandlung führt häufig dazu, dass Daten implizit konvertiert werden, was zu unerwarteten Werten führen kann. Es wird empfohlen, Datentypen explizit zu konvertieren, um sicherzustellen, dass Programme ordnungsgemäß funktionieren.

In JavaScript können Werte ganz frei (explizit und implizit) von einem Typ in einen anderen umgewandelt werden. Wenn beispielsweise ein Operator den Empfang eines Werts erwartet bestimmter Typ und ein Wert eines anderen Typs an ihn übergeben wird, versucht der Interpreter automatisch, Konvertierungen in den gewünschten Typ durchzuführen:

Console.log(10 + „machines“); // „10 Autos“. Die Zahl wird implizit in einen String umgewandelt console.log("7" * "4"); // 28. Beide Strings werden implizit in Zahlen umgewandelt

Implizite Konvertierung- Dies ist der Fall, wenn der Interpreter die Typkonvertierung automatisch durchführt, also ohne Beteiligung des Programmierers. Explizite Konvertierung- Hierbei wird die Konvertierung vom Programmierer selbst durchgeführt. Eine explizite Konvertierung wird auch als explizite Konvertierung bezeichnet Typguss:

Console.log("7" * "4"); // 28. Implizite Konvertierung console.log(Number("7") * Number("4")); // 28. Explizite Konvertierung

Die folgende Tabelle beschreibt, wie JavaScript Werte von einem Typ in einen anderen konvertiert. Leere Zellen entsprechen Situationen, in denen keine Konvertierung erforderlich ist:

Bedeutung Konvertieren zu:
Zeichenfolge Nummer Boolescher Wert Ein Objekt
nicht definiert
Null
"nicht definiert"
"Null"
NaN
0
FALSCH
FALSCH
FehlertypError
FehlertypError
WAHR
FALSCH
"WAHR"
"FALSCH"
1
0
neuer Boolescher Wert (wahr)
neuer Boolescher Wert (falsch)
„“ (leere Zeile)
"1.2"
"eins"
"-10"
"+10"
"011"
„0xff“
0
1.2
NaN
-10
10
11
255
FALSCH
WAHR
WAHR
WAHR
WAHR
WAHR
WAHR
neuer String("")
neuer String("1.2")
neuer String("one")
neuer String("-10")
neuer String("+10")
neuer String("011")
neuer String("0xff")
0
-0
NaN
Unendlichkeit
-Unendlichkeit
3
"0"
"0"
„NaN“
"Unendlichkeit"
"-Unendlichkeit"
"3"
FALSCH
FALSCH
FALSCH
WAHR
WAHR
WAHR
neue Nummer(0)
neue Zahl(-0)
neue Zahl (NaN)
neue Zahl (Unendlich)
neue Zahl (-Unendlich)
neue Nummer(3)
() (beliebiges Objekt)

(leeres Array)
(1 numerisches Element)
arr (jedes andere Array)
function()() (beliebige Funktion)

siehe Objekte konvertieren

""
"9"
siehe Objekte konvertieren
siehe Objekte konvertieren

siehe Objekte konvertieren
0
9
NaN
NaN
WAHR

WAHR
WAHR
WAHR
WAHR

Zur expliziten Konvertierung in einfache Typen werden die folgenden Funktionen verwendet: Boolean(), Number(), String(). Für die implizite Konvertierung verwendet der Interpreter dieselben Funktionen wie für die explizite Konvertierung.

Für die explizite Konvertierung können Sie Operatoren anstelle von Funktionen verwenden. Wenn beispielsweise einer der Operanden des +-Operators eine Zeichenfolge ist, wird auch der andere Operand in eine Zeichenfolge umgewandelt. Der unäre +-Operator wandelt seinen Operanden in eine Zahl um. Unärer Operator! wandelt den Operanden in einen booleschen Wert um und invertiert ihn. All dies war der Grund für die Entstehung der folgenden einzigartigen Methoden der Typkonvertierung, die in der Praxis zu finden sind:

X + "" // Gleich wie String(x) +x // Gleich wie Number(x). Sie können auch x - 0 !!x // sehen. Gleich wie Boolean(x)

In Zahlen umrechnen

Die Funktion Number() konvertiert Werte nach den folgenden Regeln:

  • Die booleschen Werte true und false werden in 1 bzw. 0 umgewandelt.
  • Die Zahlen werden unverändert zurückgegeben.
  • Der Wert null wird in 0 umgewandelt.
  • Der undefinierte Wert wird in NaN umgewandelt.

Für Strings gelten besondere Regeln:

  • Wenn eine Zeichenfolge nur Ziffern mit einem führenden + oder - Zeichen oder ohne Vorzeichen enthält, wird sie immer in eine Ganzzahl umgewandelt Dezimalzahl. Führende Nullen werden ignoriert, beispielsweise wird „0011“ in 11 umgewandelt.
  • Handelt es sich bei der Zeichenfolge um eine Gleitkommazahl mit einem führenden + oder - oder Vorzeichen ohne Vorzeichen, wird sie in die entsprechende Gleitkommazahl konvertiert (führende Nullen werden ebenfalls ignoriert).
  • Wenn es sich bei der Zeichenfolge um eine Hexadezimalzahl handelt, wird sie in die entsprechende Dezimalzahl umgewandelt.
  • Wenn die Zeichenfolge leer ist, wird sie in 0 konvertiert.
  • Wenn die Zeichenfolge etwas anderes als die vorherigen Optionen enthält, wird sie in NaN konvertiert.
  • Die Methode valueOf() wird für Objekte aufgerufen und der zurückgegebene Wert wird automatisch gemäß den vorherigen Regeln konvertiert. Wenn diese Konvertierung NaN ergibt, wird die Methode toString() aufgerufen und die Regeln für die Konvertierung von Zeichenfolgen in Zahlen werden angewendet.

Die unären Operatoren + und – folgen den gleichen Regeln wie die Funktion Number().

Konvertieren in boolesche Werte

Die Funktion Boolean() wandelt einen Wert in sein boolesches Äquivalent um:

  • Die folgenden Werte werden in „false“ konvertiert: undefiniert, null, 0, -0, NaN, „“.
  • False wird unverändert zurückgegeben.
  • Alle anderen Werte werden in true umgewandelt.

In Strings konvertieren

Die Funktion String() konvertiert Werte gemäß den folgenden Regeln:

  • Für alle Werte außer null und undefiniert wird die Methode toString() automatisch aufgerufen und eine String-Darstellung des Werts zurückgegeben.
  • Für null wird die Zeichenfolge „null“ zurückgegeben.
  • Für den Wert undefiniert wird die Zeichenfolge „undefiniert“ zurückgegeben.

Konvertieren einfacher Typen in Objekte

Um einfache Werte in Objekte umzuwandeln, werden die Konstruktoren Boolean() , Number() , String() verwendet:

Var oNum = neue Zahl(3); var oStr = new String("1.2"); var oBool = new Boolean(true); alarm(typeof oNum); // „object“ alarm(typeof oStr); // „Objekt“-Alarm(typeof oBool); // "Objekt"

Konvertieren von Objekten in einfache Werte

Alle Objekte erben zwei Konvertierungsmethoden: toString() und valueOf() .

Die Methode toString() gibt die String-Darstellung des Objekts zurück. Standardmäßig wird nichts Interessantes zurückgegeben:

Alert((x: 1).toString()); // ""

Einige Typen verfügen über speziellere Versionen der toString()-Methode. Beispielsweise wandelt die toString()-Methode für ein Array alle seine Elemente in Zeichenfolgen um und verkettet sie dann zu einer Zeichenfolge, wobei zwischen ihnen Kommas eingefügt werden:

Alert(.toString()); // "1,2,3"

Der Zweck der valueOf()-Methode ist weniger klar definiert: Sie soll ein Objekt in den einfachen Wert konvertieren, der es darstellt, sofern ein solcher Wert existiert. Objekte sind von Natur aus zusammengesetzte Werte und die meisten Objekte können nicht als einzelner einfacher Wert dargestellt werden. Daher gibt die Methode valueOf() standardmäßig einen Verweis darauf und keinen einfachen Wert zurück:

Alert(typeof (x:2).valueOf()); // "Objekt"

Beim Konvertieren eines Objekts in einen String führt der JavaScript-Interpreter Folgendes aus:

  • Wenn ein Objekt eine toString()-Methode hat, ruft der Interpreter diese auf. Wenn ein einfacher Wert zurückgegeben wird, wandelt der Interpreter den Wert in einen String um (sofern es sich nicht um einen String handelt) und gibt das Ergebnis der Konvertierung zurück.
  • Wenn das Objekt keine toString()-Methode hat oder die Methode keinen einfachen Wert zurückgibt, prüft der Interpreter, ob eine valueOf()-Methode vorhanden ist. Wenn diese Methode definiert ist, wird sie vom Interpreter aufgerufen. Wenn ein einfacher Wert zurückgegeben wird, wandelt der Interpreter diesen Wert in eine Zeichenfolge um (sofern es sich nicht um eine Zeichenfolge handelt) und gibt das Ergebnis der Konvertierung zurück.

Beim Konvertieren eines Objekts in eine Zahl macht der Interpreter dasselbe, probiert jedoch zuerst die Methode valueOf() aus:

  • Wenn ein Objekt über eine valueOf()-Methode verfügt, die einen einfachen Wert zurückgibt, wandelt der Interpreter diesen Wert (falls erforderlich) in eine Zahl um und gibt das Ergebnis zurück.
  • Wenn das Objekt keine valueOf()-Methode hat oder die Methode keinen einfachen Wert zurückgibt, prüft der Interpreter, ob eine toString()-Methode vorhanden ist. Wenn das Objekt über eine toString()-Methode verfügt, die einen einfachen Wert zurückgibt, führt der Interpreter die Konvertierung durch und gibt den resultierenden Wert zurück.
  • Andernfalls kommt der Interpreter zu dem Schluss, dass weder toString() noch valueOf() einen einfachen Wert erhalten können, und löst einen TypeError aus.

Die Methoden toString() und valueOf() sind Lese-/Schreibzugriff, sodass Sie sie überschreiben und explizit angeben können, was bei der Konvertierung zurückgegeben wird:

Var obj = (); obj.toString = function() ( return „object“; ); alarm("Das ist " + obj); // „Dies ist ein Objekt“

Der parseInt() Die Funktion analysiert ein Zeichenfolgenargument und gibt eine Ganzzahl der angegebenen Basis (der Basis in mathematischen Zahlensystemen) zurück.

Die Quelle für dieses interaktive Beispiel ist in einem GitHub-Repository gespeichert. Wenn Sie zum interaktiven Beispielprojekt beitragen möchten, klonen Sie bitte https://github.com/mdn/interactive-examples und senden Sie uns eine Pull-Anfrage.

Syntax

parseInt(string, radix)

Parameter

string Der zu analysierende Wert. Wenn dieses Argument keine Zeichenfolge ist, wird es mithilfe der abstrakten ToString-Operation in eine Zeichenfolge konvertiert. Führende Leerzeichen in diesem Argument werden ignoriert. radix Optional Eine Ganzzahl zwischen 2 und 36, die die Basis (die Basis in mathematischen Zahlensystemen) der Zeichenfolge darstellt. Seien Sie vorsichtig – das tut es nicht Standardwert ist 10 ! Das erklärt ausführlicher, was passiert, wenn Radix nicht angegeben wird.

Rückgabewert

Eine aus der angegebenen Zeichenfolge analysierte Ganzzahl.

Wenn die Basis kleiner als 11 ist und das erste Nicht-Leerzeichen nicht in eine Zahl umgewandelt werden kann, NaN ist zurück gekommen.

Beschreibung

Die parseInt-Funktion wandelt ihr erstes Argument in eine Zeichenfolge um, analysiert diese Zeichenfolge und gibt dann eine Ganzzahl oder NaN zurück.

Wenn nicht NaN , ist der Rückgabewert die Ganzzahl, die das erste Argument ist, das als Zahl in der angegebenen Basis angenommen wird. (Zum Beispiel wird eine Basiszahl von 10 von einer Dezimalzahl umgewandelt, 8 von einer Oktalzahl, 16 von einer Hexadezimalzahl usw.)

Bei Wurzelzahlen über 10 geben die Buchstaben des englischen Alphabets Ziffern größer als 9 an. Beispielsweise werden für Hexadezimalzahlen (Basis 16) A bis F verwendet.

Wenn parseInt auf ein Zeichen trifft, das in der angegebenen Basis keine Zahl ist, ignoriert es dieses und alle nachfolgenden Zeichen und gibt den bis zu diesem Punkt analysierten ganzzahligen Wert zurück. parseInt kürzt Zahlen auf ganzzahlige Werte. Führende und nachfolgende Leerzeichen sind erlaubt.

Da einige Zahlen das e-Zeichen in ihrer Zeichenfolgendarstellung verwenden (z. B. 6.022e23 für 6,022 × 10 23) führt die Verwendung von parseInt zum Abschneiden von Zahlen zu unerwarteten Ergebnissen, wenn sie für sehr große oder sehr kleine Zahlen verwendet wird. parseInt sollte nicht als Ersatz verwendet werden Math.floor().

parseInt versteht genau zwei Zeichen: + für positiv und – für negativ (seit ECMAScript 1). Dies erfolgt als erster Schritt beim Parsen, nachdem Leerzeichen entfernt wurden. Wenn keine Anzeichen gefunden werden, fährt der Algorithmus mit dem folgenden Schritt fort; Andernfalls wird das Vorzeichen entfernt und die Zahlenanalyse für den Rest der Zeichenfolge ausgeführt.

Wenn radix undefiniert, 0 oder unspezifiziert ist, geht JavaScript von Folgendem aus:

  1. Wenn die Eingabezeichenfolge mit „0x“ oder „0X“ (einer Null, gefolgt von Klein- oder Großbuchstaben X) beginnt, wird angenommen, dass die Basis 16 ist und der Rest der Zeichenfolge als Hexadezimalzahl geparst wird.
  2. Wenn die Eingabezeichenfolge mit „0“ (einer Null) beginnt, wird davon ausgegangen, dass die Basis 8 (oktal) oder 10 (dezimal) ist. Welche Basis genau gewählt wird, hängt von der Implementierung ab. ECMAScript 5 stellt klar, dass 10 (dezimal) sollen verwendet werden, aber noch nicht alle Browser unterstützen dies. Aus diesem Grund, Geben Sie bei Verwendung von parseInt immer eine Basis an.
  3. Wenn die Eingabezeichenfolge mit einem anderen Wert beginnt, ist die Basis 10 (dezimal).

Wenn das erste Zeichen nicht in eine Zahl umgewandelt werden kann, gibt parseInt NaN zurück, es sei denn, die Basis ist größer als 10.

Aus arithmetischen Gründen ist der NaN-Wert keine Zahl in irgendeiner Basis. Sie können das anrufen ist NaN Funktion, um zu bestimmen, ob das Ergebnis von parseInt NaN ist. Wenn NaN an arithmetische Operationen übergeben wird, ist das Operationsergebnis ebenfalls NaN.

Um eine Zahl in ihr String-Literal in einer bestimmten Basis umzuwandeln, verwenden Sie thatNumber .toString(radix) .

Beispiele

Verwenden von parseInt

Die folgenden Beispiele geben alle 15 zurück:

ParseInt("0xF", 16) parseInt("F", 16) parseInt("17", 8) parseInt(021, 8) parseInt("015", 10) // aber `parseInt(015, 10)` wird Rückgabe 13 parseInt(15.99, 10) parseInt("15,123", 10) parseInt("FXX123", 16) parseInt("1111", 2) parseInt("15 * 3", 10) parseInt("15e2", 10) parseInt("15px", 10) parseInt("12", 13)

Die folgenden Beispiele geben alle NaN zurück:

ParseInt("Hello", 8) // Überhaupt keine Zahl parseInt("546", 2) // Andere Ziffern als 0 oder 1 sind für binäre Basis ungültig

Die folgenden Beispiele geben alle -15 zurück:

ParseInt("-F", 16) parseInt("-0F", 16) parseInt("-0XF", 16) parseInt(-15.1, 10) parseInt("-17", 8) parseInt("-15", 10) parseInt("-1111", 2) parseInt("-15e1", 10) parseInt("-12", 13)

Die folgenden Beispiele geben alle 4 zurück:

ParseInt(4.7, 10) parseInt(4.7 * 1e22, 10) // Sehr große Zahl wird zu 4 parseInt(0.00000000000434, 10) // Sehr kleine Zahl wird zu 4

Das folgende Beispiel gibt 224 zurück:

ParseInt("0e0", 16) parseInt("123_456") // 123

Oktalinterpretationen ohne Radix

Obwohl von ECMAScript 3 abgeraten und von ECMAScript 5 verboten, interpretieren viele Implementierungen eine numerische Zeichenfolge, die mit einer führenden 0 beginnt, als Oktalzeichenfolge. Das Folgende kann ein oktales Ergebnis oder ein dezimales Ergebnis haben. Geben Sie immer eine Basis an um dieses unzuverlässige Verhalten zu vermeiden.

ParseInt("0e0") // 0 parseInt("08") // 0, da „8“ keine Oktalziffer ist.

ECMAScript 5 entfernt die Oktalinterpretation

Die ECMAScript 5-Spezifikation der Funktion parseInt erlaubt es Implementierungen nicht mehr, Zeichenfolgen, die mit einem 0-Zeichen beginnen, als Oktalwerte zu behandeln. ECMAScript 5 besagt:

Die parseInt-Funktion erzeugt einen ganzzahligen Wert, der durch Interpretation des Inhalts des Zeichenfolgenarguments gemäß der angegebenen Basis bestimmt wird. Führende Leerzeichen in der Zeichenfolge werden ignoriert. Wenn die Basis undefiniert oder 0 ist, wird davon ausgegangen, dass sie 10 ist, außer wenn die Zahl mit den Zeichenpaaren 0x oder 0X beginnt. In diesem Fall wird eine Basis von 16 angenommen.

Dies unterscheidet sich von ECMAScript 3, von dem abgeraten wurde, das jedoch eine oktale Interpretation zuließ.

Viele Implementierungen haben dieses Verhalten seit 2013 nicht übernommen, und da ältere Browser unterstützt werden müssen, Geben Sie immer eine Basis an.

Eine strengere Analysefunktion

Manchmal ist es nützlich, eine strengere Methode zum Parsen von Ganzzahlen zu haben.

Reguläre Ausdrücke können helfen:

Funktion filterInt(value) ( ​​​​if (/^[-+]?(\d+|Infinity)$/.test(value)) ( return Number(value) ) else ( return NaN ) ) console.log(filterInt( "421 ")) // 421 console.log(filterInt("-421")) // -421 console.log(filterInt("+421")) // 421 console.log(filterInt("Infinity")) // Infinity console.log(filterInt("421e+0")) // NaN console.log(filterInt("421hop")) // NaN console.log(filterInt("hop1.61803398875")) // NaN console .log (filterInt("1.61803398875")) // NaN

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 1. Auflage (ECMA-262) Standard Erste Definition.
ECMAScript 5.1 (ECMA-262)
Standard
ECMAScript 2015 (6. Auflage, ECMA-262)
Die Definition von „parseInt“ in dieser Spezifikation.
Standard
Neuester ECMAScript-Entwurf (ECMA-262)
Die Definition von „parseInt“ in dieser Spezifikation.
Entwurf

Browser-Kompatibilität

Die Kompatibilitätstabelle auf dieser Seite wird aus strukturierten Daten generiert. Wenn Sie zu den Daten beitragen möchten, schauen Sie sich bitte https://github.com/mdn/browser-compat-data an und senden Sie uns eine Pull-Anfrage.

Kompatibilitätsdaten auf GitHub aktualisieren

DesktopHandy, MobiltelefonServer
ChromRandFeuerfuchsInternet ExplorerOperSafariAndroid-WebansichtChrome für AndroidFirefox für AndroidOpera für AndroidSafari auf iOSSamsung InternetNode.js
parseIntChrome Volle Unterstützung 1Edge Volle Unterstützung 12Firefox Volle Unterstützung 1IE Volle Unterstützung 3Opera Volle Unterstützung JaSafari Volle Unterstützung JaWebView Android Volle Unterstützung 1Chrome Android Volle Unterstützung 18Firefox Android Volle Unterstützung 4Safari iOS Volle Unterstützung JaSamsung Internet Android Volle Unterstützung 1.0nodejs Volle Unterstützung Ja
Analysiert Zeichenfolgen mit führenden Nullen als Dezimalzahlen und nicht als OktalzeichenfolgenChrome Volle Unterstützung 23Edge Volle Unterstützung 12Volle Unterstützung für Firefox 21IE Volle Unterstützung 9Opera Volle Unterstützung JaSafari Volle Unterstützung 6WebView Android Volle Unterstützung 4.4Chrome Android Volle Unterstützung 25Firefox Android Volle Unterstützung 21Opera Android Volle Unterstützung JaSafari iOS Volle Unterstützung 6Samsung Internet Android Volle Unterstützung Janodejs Volle Unterstützung Ja

Es gibt zwei Möglichkeiten, eine Zeichenfolge in Javascript in eine Zahl umzuwandeln. Eine Möglichkeit besteht darin, es zu analysieren, und eine andere darin, seinen Typ in eine Zahl zu ändern. Alle Tricks in den anderen Antworten (wie unäres Plus) beinhalten die implizite Umwandlung des String-Typs in eine Zahl. Das Gleiche können Sie auch mit der Zahlenfunktion tun.

Syntaktisch

Var parsed = parseInt("97", 10);

ParseInt und parseFloat sind zwei Funktionen, die zum Parsen von Zeichenfolgen in Zahlen verwendet werden. Das Parsen stoppt stillschweigend, wenn es auf ein Zeichen trifft, das es nicht erkennt, was beim Parsen von Zeichenfolgen wie „92px“ nützlich sein kann, aber auch etwas gefährlich ist, da es bei fehlerhafter Eingabe keine Fehlermeldung ausgibt, sondern „zurückkehrt“. NaN, wenn die Zeichenfolge nicht mit einer Zahl beginnt, wird ignoriert. Hier ist ein Beispiel, das etwas anderes tut, was Sie wollen, und ohne einen Hinweis darauf zu geben, dass etwas schief gelaufen ist.

Var widgetsSold = parseInt("97,800", 10); // widgetsSold ist jetzt 97

Es empfiehlt sich, als zweites Argument immer eine Dezimalzahl anzugeben. Wenn in älteren Browsern eine Zeichenfolge mit 0 begann, wurde sie als Oktal interpretiert, es sei denn, es wurde ein Basiswert angegeben, was viele Leute überraschte. Das Verhalten für hexadezimale Triggerung wird ausgelöst, wenn die Zeichenfolge mit 0x beginnt, sofern kein Basiswert angegeben ist. 0xff . Der Standard hat sich tatsächlich mit Ecmascript 5 geändert, sodass moderne Browser keine Oktalzahlen mehr auslösen, wenn eine 0 am Anfang steht, es sei denn, es wird keine Basis angegeben. parseInt versteht Radikale bis zur Basis 36, in diesem Fall sowohl obere als auch untere Kleinbuchstaben werden als gleichwertig behandelt.

Stringtyp in Zahl ändern

Alle anderen oben genannten Tricks, die ParseInt nicht verwenden, beinhalten die implizite Umwandlung einer Zeichenfolge in eine Zahl. Ich mache es lieber explizit

Var cast = Number("97");

Dies unterscheidet sich von Parsing-Methoden (obwohl Leerzeichen weiterhin ignoriert werden). Dies ist strenger: Wenn die gesamte Zeichenfolge nicht verstanden wird, wird NaN zurückgegeben, sodass Sie sie nicht für Zeichenfolgen wie 97px verwenden können. Da Sie eine Grundzahl und kein Number-Wrapper-Objekt benötigen, stellen Sie sicher, dass Sie der Number-Funktion nicht new voranstellen.

Offensichtlich erzeugt die Konvertierung in eine Zahl einen Wert, der eher eine Gleitkommazahl als eine Ganzzahl sein könnte. Wenn Sie also eine Ganzzahl möchten, müssen Sie diese ändern. Dafür gibt es mehrere Möglichkeiten:

Var abgerundet = Math.floor(Number("97.654")); // andere Optionen sind Math.ceil, Math.round var fixiert = Number("97.654").toFixed(0); // gerundet statt abgeschnitten var bitwised = Number("97.654")|0; // nicht für große Zahlen verwenden

Jeder bitweise Operator (hier habe ich bitweise oder verwendet, aber Sie können auch eine doppelte Negation wie in der vorherigen Antwort oder Bitshift durchführen) wandelt den Wert in eine 32-Bit-Ganzzahl um, und die meisten von ihnen werden in eine vorzeichenbehaftete Ganzzahl umgewandelt. Bitte beachten Sie, dass dies möchte nicht, dass Sie nach großen ganzen Zahlen suchen. Wenn eine Ganzzahl nicht in 32 Bit dargestellt werden kann, wird sie beendet.

~~ "3000000000.654" === -1294967296 // Dies ist die gleiche wie die Nummer ("3000000000.654") | 0 "3000000000.654" >>>> 0 === 3000000000 // Unsigned Right Shift gibt Ihnen ein zusätzliches Bit "3000000000.654"> >> 0 === 3647256576 // schlägt aber bei größeren Zahlen immer noch fehl

Damit man richtig arbeiten kann große Zahlen, sollten Sie Rundungsmethoden verwenden

Math.floor("3000000000.654") === 3000000000 // Dies ist dasselbe wie Math.floor(Number("3000000000.654"))

Beachten Sie, dass alle diese Methoden die Exponentialschreibweise verstehen, sodass 2e2 200 und nicht NaN ist. Außerdem versteht Number „Infinity“, während dies bei Parsing-Methoden nicht der Fall ist.

Brauch

Es ist unwahrscheinlich, dass eine dieser Methoden genau das tut, was Sie wollen. Beispielsweise möchte ich normalerweise einen Fehler, der auftritt, wenn das Parsen fehlschlägt, und ich benötige keine Unterstützung für Unendlichkeit, Exponenten oder führende Leerzeichen. Abhängig von Ihrer Verwendung ist es manchmal sinnvoll, eine benutzerdefinierte Konvertierungsfunktion zu schreiben.

Überprüfen Sie immer, ob die ausgegebene Zahl oder eine der Analysemethoden der erwarteten Zahl entspricht. Mit ziemlicher Sicherheit möchten Sie isNaN verwenden, um sicherzustellen, dass die Zahl nicht NaN ist (normalerweise die einzige Möglichkeit, festzustellen, ob die Analyse fehlgeschlagen ist).