Versuchen Sie Folgendes in JavaScript auszuführen:
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
Ich habe gerade auf die harte Tour gelernt, dass JavaScript denkt, dass die führende Null eine oktale Ganzzahl anzeigt , und da es keine "8"
oder "9"
in Basis-8 gibt, gibt die Funktion Null zurück. Ob es Ihnen gefällt oder nicht, dies ist beabsichtigt .
Was sind die Problemumgehungen?
Hinweis: Der Vollständigkeit halber werde ich eine Lösung veröffentlichen, aber es ist eine Lösung, die ich hasse. Bitte posten Sie andere / bessere Antworten.
Aktualisieren:
Die 5. Ausgabe des JavaScript-Standards ( ECMA-262 ) führt eine grundlegende Änderung ein, die dieses Verhalten beseitigt. Mozilla hat eine gute Zusammenfassung .
10
(dezimal), es sei denn, der zu analysierenden Zahl wird ein Präfix vorangestellt 0x
, z. B. 0xFF
in diesem Fall ist der Basisparameter standardmäßig 16. Hoffentlich eines Tages dieses Problem wird eine ferne Erinnerung sein.
+'08' === 8
? Wahr! Vielleicht brauchen Sie wirklich parseInt
für Ihren echten Code, aber nicht für die oben genannten.
Number('08')
0
oder ist undefined
und die Nummer der Zeichenfolge beginnt mit einer 0
Ziffer, auf die kein x
oder folgt, oder X
die Implementierung kann die Nummer nach eigenem Ermessen entweder als oktal oder als dezimal interpretieren . Implementierungen werden empfohlen, Zahlen in diesem Fall als dezimal zu interpretieren. " ( meine Betonung)