Auf den ersten Blick ist die Funktion parseInt()
in JavaScript sehr einfach. Ein übergebener String wird in eine Integerzahl
umgewandelt. Wenn der übergegeben String aber führende Nullen beinhaltet,
kann es zu interessanten Phänomenen kommen.
Aufgefallen war es gestern bei einer
Anwendung als es darum ging, in JavaScript aus dem als Zahl gespeicherten
Monat die ausgeschriebene Form zu bestimmen. Das Problem war, dass für
die Sortierung die Monate bis Septemer als String mit führender Null gespeichert
waren.
parseInt("07")
lieferte richtig 7
zurück. parseInt("08")
lieferte NaN
zurück, was soviel heißt, wie die Zahl konnte nicht umgewandelt werden.
Mit Googles Hilfe und der JavaScript-Referenz
in SelfHTML
haben wir des Rätsels Lösung gefunden.
parseInt()
kann nicht nur Zahlen des Dezimalsystems umwandeln, sondern auch Zahlen
einer anderen Zahlenbasis. Das kann z.B. sehr praktisch sein, wenn Hexadezimalzahlen
in Dezimalzahlen umgewandelt werden sollen. Die meisten Entwickler, mich
eingeschlossen, wissen nicht, dass es für parseInt()
einen zweiten, optionalen Parameter radix gibt. Mit seiner Hilfe
kann die Zahlenbasis bestimmt werden. Fehlt dieser Parameter versucht parseInt()
anhand des übergegebenen Strings die Zahlenbasis zu bestimmen.
Fängt der String mit "0x"
an, wird er als Hexadezimalzahl interpretiert. Fängt er mit "0"
an, wird er als Oktalzahl interpretiert. Bei Oktalzahlen sind aber nur
Zeichen von 0 bis 7 erlaubt. Deswegen liefert parseInt("07")
richtig 7
zurück, während parseInt("08")
eine Fehlermeldung zurückliefert.
Gibt man die Zahlenbasis mit an, so
funktioniert die Funktion wie erwartet:
parseInt("08", 10)
liefert 8
zurück.