2012-09-07 29 views
12

Duplicar posible:
Workarounds for JavaScript parseInt octal bugparseInt ("08") devuelve 0

He estado trabajando en una función de JavaScript, el establecimiento de los objetos de fecha declarando el año, mes & fecha . Sin embargo, cuando el mes tiene un valor de 08 o 09, 0 se devuelve al utilizar parseInt(). Ver más abajo:

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 

He creado un jsFiddle para demostrar este problema:

http://jsfiddle.net/GhkEf/

¿Por qué parseInt("08")parseInt("09") y retorno 0?

+0

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

+2

Lea los documentos de MDN: https://developer.mozilla.org/en- US/docs/JavaScript/Reference/Global_Objects/parseInt Este problema está bien documentado –

+0

@ ŠimeVidas ¡Ahh por supuesto! ¡Hipo de la tarde del viernes! Gracias por sus respuestas – Curt

Respuesta

37

Esto se debe a que los números que comienzan con 0 se consideran octales. Y 08 es un número incorrecto en octal.

Use parseInt('09', 10); en su lugar.

+0

gracias. Me salvaste el tiempo. –

+2

Esto ocurre solo en IE8. –

+0

Muchas gracias. Esta es una pregunta y respuesta muy útil. –

4

Se está analizando como un número octal. Use el parámetro radix en parseInt.

parseInt('08', 10);

Una actualización: A partir de ES5, navegadores debe no tener este error. Los literales octales requieren estar en el formato 0o12 para ser considerados números octales. 08 por defecto se considera ahora como un número decimal en ES5, sin embargo, todos los navegadores no admita esto todavía, por lo que debe continuar pasando el parámetro radix a parseInt

1

Puede solucionar este problema mediante la inclusión de la raíz, por ejemplo:

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

es necesario agregar una base de diez:

parseInt("08", 10); 

Algunas implementaciones por defecto a octal.