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. 0xFFin 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 parseIntfür Ihren echten Code, aber nicht für die oben genannten.
Number('08')
0oder ist undefinedund die Nummer der Zeichenfolge beginnt mit einer 0Ziffer, auf die kein xoder folgt, oder Xdie 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)