Javascript trata como octales los números que empiezan por cero !


Hace poco me topé con un problema rarito mientras programaba en Javascript que me tuvo en jaque un buen rato. Lo describo a continuación para que todo el mundo pueda detectarlo y para que yo mismo pueda usarlo como referencia en el futuro si vuelve a suceder 😉

Estaba realizando una validación de campos de hora en un formulario, de forma que disponía de un campo para “Hora Inicio” y otro para “Hora Fin”. La condición de validación era que Hora Fin > Hora Inicio. La manera en que procesaba la validación era la siguiente :

1) Convertía los campos de hora a numéricos desprendiéndome del símbolo “:” mediante replace(HoraInicio,’:’,”)

2) Luego hacía una conversión del campo a entero (siempre que fuera numérico) :
if ((!isNaN(HoraInicio)) && (!isNaN(HoraFin)))
if parseInt(HoraFin)>parseInt(HoraInicio)
VALIDACIÓN OK.

Pues bien, este planteamiento contiene un error no visible a simple vista. Si el usuario especificaba como hora inicio / hora fin las 9:00 y 9:01 todo funcionaba correctamente, pero sí especificaba 9:00 y 09:01 todo fallaba estrepitosamente. ¿Por qué?

Pues porque Javascript interpreta cualquier número que empiece por cero en base octal. ¿Cómo? ¿Qué? Es decir, para Javascript el número 90 y el 090 no son el mismo puesto que 090 es interpretado en octal …

La forma de solucionar el problema es indicándole a la función parseInt la base en la que queremos que trate el número a convertir, así, en el ejemplo anterior le indicaríamos base decimal para realizar la comparación :

if parseInt(HoraFin,10)>parseInt(HoraInicio,10) …
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s