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/
var values = ["123",
undefined,
"not a number",
"123.45",
"1234 error",
"2147483648",
"4999999999"
];
for (var i = 0; i < values.length; i++){
var x = values[i];
console.log(x);
console.log(" Number(x) = " + Number(x));
console.log(" parseInt(x, 10) = " + parseInt(x, 10));
console.log(" parseFloat(x) = " + parseFloat(x));
console.log(" +x = " + +x);
console.log(" ~~x = " + ~~x);
}
Debug-Konsole:
123
Number(x) = 123
parseInt(x, 10) = 123
parseFloat(x) = 123
+x = 123
~~x = 123
undefined
Number(x) = NaN
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = NaN
~~x = 0
null
Number(x) = 0
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = 0
~~x = 0
"not a number"
Number(x) = NaN
parseInt(x, 10) = NaN
parseFloat(x) = NaN
+x = NaN
~~x = 0
123.45
Number(x) = 123.45
parseInt(x, 10) = 123
parseFloat(x) = 123.45
+x = 123.45
~~x = 123
1234 error
Number(x) = NaN
parseInt(x, 10) = 1234
parseFloat(x) = 1234
+x = NaN
~~x = 0
2147483648
Number(x) = 2147483648
parseInt(x, 10) = 2147483648
parseFloat(x) = 2147483648
+x = 2147483648
~~x = -2147483648
4999999999
Number(x) = 4999999999
parseInt(x, 10) = 4999999999
parseFloat(x) = 4999999999
+x = 4999999999
~~x = 705032703
Das ~~x Version führt zu einer Zahl in "mehr" Fällen, in denen andere häufig dazu führen undefined, schlägt jedoch bei ungültiger Eingabe fehl (z. B. wird zurückgegeben, 0wenn 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 parseIntund die parseFloatFunktionen 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 / 37
Dies hängt alles davon ab, wie die Perf-Tests konfiguriert sind, da einige zeigen, dass parseInt / parseFloat viel langsamer ist.
Meine Theorie lautet:
- Lügen
- Verdammte Linien
- Statistiken
- JSPerf Ergebnisse :)