2012-09-07 19 views
12

Eventuali duplicati:
Workarounds for JavaScript parseInt octal bugparseInt ("08") restituisce 0

Ho lavorato su una funzione javascript, impostando gli oggetti data dichiarando l'anno, il mese & data . Tuttavia, quando il mese ha un valore di 08 o 09, viene restituito 0 quando si utilizza parseInt(). Vedi sotto:

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 

ho creato un jsFiddle per dimostrare questo problema:

http://jsfiddle.net/GhkEf/

Perché parseInt("08") e parseInt("09") ritorno 0?

+0

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

+2

Leggi i documenti MDN: https://developer.mozilla.org/en- US/docs/JavaScript/Reference/Global_Objects/parseInt Questo problema è ben documentato –

+0

@ ŠimeVidas Ahh ovviamente! Venerdì pomeriggio singhiozzo! Grazie per le tue risposte – Curt

risposta

37

Questo perché i numeri iniziati con 0 sono considerati ottali. E 08 è un numero sbagliato in ottale.

Utilizzare invece parseInt('09', 10);.

+0

grazie. Mi hai salvato il tempo. –

+2

Si verificano solo su IE8. –

+0

Grazie mille. Questa è una domanda e una risposta molto utili. –

4

Viene analizzato come numero ottale. Utilizzare il parametro radix in parseInt.

parseInt('08', 10);

Un aggiornamento: Come di ES5, browser dovrebbe non avere questo bug. I valori letterali ottali richiedono di essere nella forma 0o12 per essere considerati numeri ottali. 08 di default ora è considerato un numero decimale in ES5, tuttavia, tutti i browser potrebbe non supportare questo ancora, così si dovrebbe continuare a passare il parametro radix-parseInt

1

È possibile risolvere questo problema includendo la radice, ad esempio:

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

È necessario aggiungere una radice di dieci:

parseInt("08", 10); 

alcune implementazioni di default per ottale.