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.
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.
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.
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.
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.
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) | siehe Objekte konvertieren "" | siehe Objekte konvertieren 0 9 NaN NaN | 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)
Die Funktion Number() konvertiert Werte nach den folgenden Regeln:
Für Strings gelten besondere Regeln:
Die unären Operatoren + und – folgen den gleichen Regeln wie die Funktion Number().
Die Funktion Boolean() wandelt einen Wert in sein boolesches Äquivalent um:
Die Funktion String() konvertiert Werte gemäß den folgenden Regeln:
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"
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:
Beim Konvertieren eines Objekts in eine Zahl macht der Interpreter dasselbe, probiert jedoch zuerst die Methode valueOf() 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.
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.
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:
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) .
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
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.
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.
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
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 |
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
Desktop | Handy, Mobiltelefon | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrom | Rand | Feuerfuchs | Internet Explorer | Oper | Safari | Android-Webansicht | Chrome für Android | Firefox für Android | Opera für Android | Safari auf iOS | Samsung Internet | Node.js | |
parseInt | Chrome Volle Unterstützung 1 | Edge Volle Unterstützung 12 | Firefox Volle Unterstützung 1 | IE Volle Unterstützung 3 | Opera Volle Unterstützung Ja | Safari Volle Unterstützung Ja | WebView Android Volle Unterstützung 1 | Chrome Android Volle Unterstützung 18 | Firefox Android Volle Unterstützung 4 | Safari iOS Volle Unterstützung Ja | Samsung Internet Android Volle Unterstützung 1.0 | nodejs Volle Unterstützung Ja | |
Analysiert Zeichenfolgen mit führenden Nullen als Dezimalzahlen und nicht als Oktalzeichenfolgen | Chrome Volle Unterstützung 23 | Edge Volle Unterstützung 12 | Volle Unterstützung für Firefox 21 | IE Volle Unterstützung 9 | Opera Volle Unterstützung Ja | Safari Volle Unterstützung 6 | WebView Android Volle Unterstützung 4.4 | Chrome Android Volle Unterstützung 25 | Firefox Android Volle Unterstützung 21 | Opera Android Volle Unterstützung Ja | Safari iOS Volle Unterstützung 6 | Samsung Internet Android Volle Unterstützung Ja | nodejs 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).