Cuando en un formulario Web tenemos un campo de texto (INPUT, type=text), que se utiliza para que los usuarios introduzcan números (por ejemplo su edad, un número de factura...) lo habitual es verificar su contenido con la función parseInt de JavaScript.

Imaginemos por ejemplo que hay que verificar que un campo de este tipo no sobre pase un determinado valor. Normalmente escribiríamos una condición similar a esta:

if ( parseInt(micampo.value) > valorMax ) alert("Se ha sobrepasado el máximo");

Un código sencillo, directo y, en apariencia, sin problemas. Pero, ¿qué pasaría si por ejemplo el usuario introduce el número '034', es decir, incluye el dígito cero precediendo al número?.

Respuesta: que parseInt en lugar de devolver el número 34 que es sin duda el que esperábamos devolverá un 28.

El motivo es que la función parseInt interpreta los textos que comienzan con un cero como números en base octal y no decimal, por lo que 034 se interpreta como el número 28 en base octal. Por lo tanto la comparación hecha en el condicional puede fallar.

SOLUCIÓN: mi consejo es que siempre se explicite la base con la que deseamos trabajar cuando usemos la función parseInt (y similares) en JavaScript. En el caso más habitual la base numérica con la que trabajamos es la decimal, por lo que al indicarla la expresión condicional anterior quedaría como sigue:

if ( parseInt(micampo.value, 10) > valorMax ) alert("Se ha sobrepasado el máximo");

Así evitaremos problemas.

Cuña publicitaria ;-)
¿Estás interesado en JavaScript?. Pues échale un vistazo a mi libro sobre el tema pulsando aquí.
Este libro ha sido uno de los veinte más vendidos del mundo sobre JavaScript en Amazon.com (en todos los idiomas), ha tenido una edición especial para EE.UU. y es libro recomendado en la bibliografía de multitud de universidades y centros de estudios. Si te interesa aprender JavaScript ¡cómpratelo!. :-)

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA