Las llamadas a parseIntsiempre deben especificar una base en el segundo argumento:
parseInt("08", 10);
Las versiones anteriores de JavaScript tratan las cadenas que comienzan con 0octal (cuando no se especifica una base) y ni 08ni 09son números octales válidos.
De la documentación de Mozilla :
Si radix no está definido o es 0, JavaScript asume lo siguiente:
- Si la cadena de entrada comienza con "0x" o "0X", la base es 16 (hexadecimal).
- Si la cadena de entrada comienza con "0", la base es ocho (octal). Esta característica no es estándar y algunas implementaciones deliberadamente no la admiten (en su lugar, utilizan el radix 10). Por esta razón, siempre especifique una base cuando use parseInt .
- Si la cadena de entrada comienza con cualquier otro valor, la base es 10 (decimal).
Si el primer carácter no se puede convertir en un número, parseInt devuelve NaN.
Y del estándar ECMAScript 3 :
Cuando la base es 0 o no está definida y el número de la cadena comienza con un
dígito 0 no seguido por una x o una X , entonces la implementación puede, a su discreción, interpretar el número como octal o decimal. Se anima a las implementaciones a interpretar los números en este caso como decimales.
La última versión de JavaScript ( ECMAScript 5 ) abandona este comportamiento , pero aún debe especificar la base para satisfacer los navegadores más antiguos.