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. En consecuencia, la comparación hecha en el condicional puede fallar.
SOLUCIÓN: lo más recomendable 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 :)
Si quieres aprender de verdad todos los fundamentos de JavaScript, no te pierdas mi libro. Además podrás utilizarlo como guía de estudio secuencial o bien como manual de referencia para tenerlo siempre a mano.