¿Porqué Javascript retorna cero para parseInt('08') y parseInt('09')?

Sólo un idiota puede ser totalmente feliz.

Mario Vargas Llosa

Suscríbete al feed

Comentarios recientes

Escribiendo una sencilla función Javascript para crear un objeto Date a partir de una cadena con formato 'yyyy-mm-dd' me encontré con una particularidad de la función parseInt, usada para transformar cadenas en enteros.

Tanto parseInt('08') como parseInt('09') retornan cero debido a que la función pretende determinar la base del sistema de numeración usado para la conversión y en Javascript los números que empiezan en cero se consideran de base octal. 08 y 09 no existen en el sistema octal y allí el problema.

Para resolverlo basta con usar el segundo parámetro de parseInt, que es justamente la base del sistema de numeración a usar. Las llamadas correctas serían entonces: parseInt('08', 10) y parseInt('09', 10).

Otro de esos detallitos, ¿no?

Participa en la discusión

Javascript y números octales

Tienes razón, eso está en la documentación y no es un bug, no quise decir que lo fuera, pero a muchos se nos puede pasar y es importante recordarlo.

Gracias por el comentario. Saludos.

Alexis Bellido

Muchas gracias por la

Muchas gracias por la aclaración. Ya estabamos pensando que el javascript era una mierda. Y resulta que es una auténtica mierda.

Gracias a ti, sabemos como rebuscar dentro de la basura.

Como simple usuario, solo

Como simple usuario, solo decir que hace 8 y 10 años navegaba tan feliz con IE, Opera, Mozilla o lo fuera.

Ahora cada vez más el 50% del tiempo me trago errores de Javascrpit en webs que creo podrian haberse diseñado en su totalidad sin Javascript y de hecho antes no lo tenian.

Gracias!!!! me estaba

Gracias!!!! me estaba volviendo loca!!!!!

Jajaja, muchas gracias compañer@

Pues a mí me has ahorrado

Pues a mí me has ahorrado horas de dolor de cabeza, aunque la solución cutre está a la mano, no? pones algo del tipo:

if (num='08') num_int=8;
else if (num='09') num_int=9;
else num_int=parseInt(num);

Pero en fin... como decía alguien por ahí VAYA MIERDA con el javascript. ¿En qué proporción se usan números en base octal frente a base decimal?! qué increíble...

Aunque esté anotado en la documentación... no es justificación para hacerlo así. Bueno, la prueba es que es el primer lenguaje de programación que conozco que la función hómologa ("pasar a entero") trabaja con base octal por defecto... al menos de "alto nivel". En fin... ;)

Gracias maestro.
SERGI

Muchas gracias por la

Muchas gracias por la explicación. Había llegado a detectar el error, pero desconocia el por qué pasaba y como podría solucionarlo.

Gracias y sigue así.

Muy buena explicación. Para

Muy buena explicación. Para comprobar que todo lo insolito que sucede en la programación tiene una explicación... ya me parecía que tenía que haber una respuesta sensata a algo tan absurdo, parecía como ver un 2 en el sistema binario.

De paso, estaba usando parseFloat('08') --> 8, idem para el 09....

Saludos

David y Carlos: O sea que,

David y Carlos:

O sea que, cuando sea que vuestro IQ (CI) no dé lo suficiente para comprender una razón inteligente para algo, entonces es una mierda. Bien, me parece razonable - bajo ese esquema de IQ, claro está.

Publica comentarios relevantes, usa español correcto y no envíes publicidad. Creemos discusiones en las que valga la pena participar. Puedes usar Markdown.

Tu comentario