Harry: Fehlfunktion bei 'eval' und 'parseInt'

Beitrag lesen

Guten Tag

Bei Deinem "Problem" dürfte es sich allem Anschein nach um das Oktalsystem handeln (01234567), ein Relikt aus älteren Zeiten. Heute werden Oktalzahlen durch eine führende Null gekennzeichnet.

Bei eval('08') bekommt man 8 , parseInt('08')
liefert jedoch 0...

eval scheint hier das Oktalsystem nicht zu interpretieren bzw. ist etwas intelligenter als parseInt und bemerkt, daß es sich hier anscheinend um einen String oder eine normale Zahl handelt, da die Zahl so wie sie da steht im Oktalsystem  nicht gültig ist ... parseInt gibt korrekterweise 0 zurück, da die Zahl im Oktalsystem nicht zu finden ist und somit bei "0" Schluß ist.

Und wenn eval('010') bzw. parseInt('010') ausgeführt wird, sind sie sich wieder einig und liefern 8 (!) zurück...

Das ist auch gut so. Durch die führende Null gekennzeichnet interpretieren beide die Zahl im Oktalsystem: 1x8 + 0x1 = 8. Für 011 sollte dann konsequenterweise 9 zurückgegeben werden, für 012 10, 013 11 usw.

selbst eval('010*2') liefert konsequent 16.

Gut so. 8*2 ist auch 16 :-)

Das geschieht sowohl bei IE als auch bei Netscape.

Dann freuen wir uns, daß ausnahmsweise mal beide etwas gleich machen.

Weiß jemand, wie man den Fehler umschiffen kann ?

Ist kein Fehler, ist Absicht. Du mußt nur die führende Null loswerden, dann wird es auch nach Deinen Wünschen (dezimal) interpretiert werden.

Ciao,

Harry