Beliebige Nummer, es ist Nummer. String sieht aus wie eine Zahl, es ist eine Zahl. Alles andere geht es NaN.
'a' => NaN
'1' => 1
1 => 1
javascript
Beatak
quelle
quelle
'1a'
String zu tun ? Mit' 1'
einem? Mit anderen Worten, warum reichen Ihnen die meisten gängigen Methoden (Number(x)
undparseInt(x, 10)
) nicht aus?Antworten:
Soweit ich weiß, gibt es vier Möglichkeiten.
Durch diesen schnellen Test, den ich gemacht habe, kommt es tatsächlich auf Browser an.
http://jsperf.com/best-of-string-to-number-conversion/2
Implicit
In 3 Browsern als am schnellsten markiert, aber der Code ist schwer zu lesen. Wählen Sie also, wie Sie möchten!quelle
1*
für die Konvertierung von Datum in Nummer, ähnlich wie+
oben. dh1*new Date()
eher als+new Date()
. Möglicherweise ist es besser lesbar?1*
wird bevorzugt, weil es weniger fehleranfällig ist. Eine unerwünschte baumelnde Variable zuvor+1
ist kein Analysefehler. Es ist ein Trick ähnlich wieif (MYCONSTANT == myvar)
inC
.Es gibt mindestens 5 Möglichkeiten, dies zu tun:
Wenn Sie nur in Ganzzahlen konvertieren möchten, ist ein weiterer schneller (und kurzer) Weg das Doppelbitweise nicht (dh die Verwendung von zwei Tilde-Zeichen):
z.B
~~x;
Referenz: http://james.padolsey.com/cool-stuff/double-bitwise-not/
Die 5 gängigen Methoden, die ich bisher kenne, um eine Zeichenfolge in eine Zahl umzuwandeln, haben alle ihre Unterschiede (es gibt mehr bitweise Operatoren, die funktionieren, aber alle liefern das gleiche Ergebnis wie
~~
). Diese JSFiddle zeigt die verschiedenen Ergebnisse, die Sie in der Debug-Konsole erwarten können: http://jsfiddle.net/TrueBlueAussie/j7x0q0e3/22/Debug-Konsole:
Das
~~x
Version führt zu einer Zahl in "mehr" Fällen, in denen andere häufig dazu führenundefined
, schlägt jedoch bei ungültiger Eingabe fehl (z. B. wird zurückgegeben,0
wenn die Zeichenfolge nach einer gültigen Zahl Zeichen enthält, die keine Zahlen sind).Überlauf
Bitte beachten Sie: Bei
~~
den anderen Konvertierungen können ganzzahlige Überläufe und / oder Bitkürzungen auftreten , nicht jedoch. Während es ungewöhnlich ist, so große Werte einzugeben, müssen Sie sich dessen bewusst sein. Beispiel aktualisiert, um viel größere Werte einzuschließen.Einige Perf-Tests zeigen, dass der Standard
parseInt
und dieparseFloat
Funktionen tatsächlich die schnellsten Optionen sind, die vermutlich von Browsern stark optimiert wurden. Dies hängt jedoch von Ihren Anforderungen ab, da alle Optionen schnell genug sind : http://jsperf.com/best-of-string-to -Nummernumwandlung / 37Dies hängt alles davon ab, wie die Perf-Tests konfiguriert sind, da einige zeigen, dass parseInt / parseFloat viel langsamer ist.
Meine Theorie lautet:
quelle
~~4294967296
Rückgabe0
.Stellen Sie dem
+
Operator den String voran.quelle
Eine schnelle Möglichkeit, Zeichenfolgen in eine Ganzzahl umzuwandeln, besteht darin, eine bitweise oder wie folgt zu verwenden:
Während es davon abhängt, wie es implementiert wird, sollte es theoretisch relativ schnell sein (mindestens so schnell wie
+x
), da es zuerstx
in eine Zahl umgewandelt wird und dann ein sehr effizientes oder ausführt.quelle
Hier ist eine einfache Möglichkeit: var num = Number (str); In diesem Beispiel ist str die Variable, die den String enthält. Sie können testen und sehen, wie es geöffnet funktioniert: Google Chrome-Entwicklertools. Gehen Sie dann zur Konsole und fügen Sie den folgenden Code ein. Lesen Sie die Kommentare, um besser zu verstehen, wie die Konvertierung durchgeführt wird.
quelle
Ich finde das
num * 1
einfach, klar und funktioniert für ganze Zahlen und Gleitkommazahlen ...quelle
Dies ist wahrscheinlich nicht so schnell, hat aber den zusätzlichen Vorteil, dass sichergestellt ist, dass Ihre Nummer mindestens einen bestimmten Wert (z. B. 0) oder höchstens einen bestimmten Wert hat:
Wenn Sie einen Mindestwert sicherstellen müssen, tun Sie dies normalerweise
Math.max(..., 0)
erspart Ihnen das Schreiben von zwei Aussagen.quelle
Math.abs(input)
? Außerdem werden Zeichenfolgen in positive Zahlen konvertiert und einige zusätzliche Zeichen gespeichert.input
nicht in Zahl umgewandelt werden kann, erhalten SieNaN
Sie können UnitOf verwenden , eine Mess- und Datentypkonvertierungsbibliothek, die wir gerade offiziell veröffentlicht haben! UnitOf ist superschnell, klein und kann jeden Datentyp effizient konvertieren, ohne jemals einen Fehler oder null / undefiniert auszulösen. Von Ihnen definierte Standardwerte oder die Standardeinstellungen von UnitOf werden zurückgegeben, wenn eine Konvertierung nicht erfolgreich ist.
quelle
Der schnellste Weg ist die Verwendung von -0:
quelle