2012-09-07 17 views
12

Mögliche Duplizieren:
Workarounds for JavaScript parseInt octal bugparseInt ("08") liefert 0

Ich habe auf einer Javascript-Funktion arbeiten, Datum Objekte Einstellung von Jahr zu erklären, Monat & Datum . Wenn der Monat jedoch einen Wert von 08 oder 09 hat, wird 0 zurückgegeben, wenn parseInt() verwendet wird. Siehe unten:

parseInt("01") //returns 1 
parseInt("02") //returns 2 
parseInt("03") //returns 3 
parseInt("04") //returns 4 
parseInt("05") //returns 5 
parseInt("06") //returns 6 
parseInt("07") //returns 7 
parseInt("08") //returns 0? 
parseInt("09") //returns 0? 
parseInt("10") //returns 10 

Ich habe eine jsFiddle erstellt, dieses Problem zu demonstrieren:

http://jsfiddle.net/GhkEf/

Warum parseInt("08") und parseInt("09") Rückkehr 0?

+0

http://stackoverflow.com/questions/6410009/what-do-you-think-parseint08-will-return?rq=1 –

+2

Lesen Sie die MDN-Dokumentation: https://developer.mozilla.org/en- US/docs/JavaScript/Referenz/Global_Objects/parseInt Dieses Problem ist gut dokumentiert –

+0

@ ŠimeVidas Ahh natürlich! Freitagnachmittag Schluckauf! Danke für Ihre Antworten – Curt

Antwort

37

Das liegt daran, dass Zahlen, die mit 0 beginnen, als oktal gelten. Und 08 ist eine falsche Zahl in Oktal.

Verwenden Sie stattdessen parseInt('09', 10);.

+0

danke. Du hast meine Zeit gerettet. –

+2

Dies geschieht nur auf IE8. –

+0

Vielen Dank. Dies ist eine sehr nützliche Frage und Antwort. –

4

Es wird als Oktalzahl analysiert. Verwenden Sie den Parameter in parseInt.

parseInt('08', 10);

Ein Update: Ab ES5 sollte Browser nicht haben diesen Fehler. Oktalliterale müssen in der Form 0o12 vorliegen, um als Oktalzahlen betrachtet zu werden. 08 standardmäßig wird nun eine Dezimalzahl in ES5 jedoch in Betracht gezogen, alle Browser diese noch nicht unterstützen kann, so sollten Sie die radix Parameter parseInt

1

Sie können dieses Problem beheben, indem Sie den Radix, einschließlich zB passieren weiterhin:

parseInt("08", 10); // outputs 8 
1

Sie benötigen einen Radix von zehn hinzuzufügen:

parseInt("08", 10); 

Einige Implementierungen standardmäßig oktal.