Intente ejecutar lo siguiente en JavaScript:
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
Acabo de enterarme por completo que JavaScript cree que el cero inicial indica un número entero octal , y dado que no existe "8"o "9"en base-8, la función devuelve cero. Nos guste o no, esto es por diseño .
¿Cuáles son las soluciones alternativas?
Nota: En aras de la exhaustividad, estoy a punto de publicar una solución, pero es una solución que odio, así que publique otras / mejores respuestas.
Actualizar:
La quinta edición del estándar JavaScript ( ECMA-262 ) introduce un cambio radical que elimina este comportamiento. Mozilla tiene una buena reseña .
10(decimal) a menos que el número a analizar tenga como prefijo 0x, por ejemplo 0xFF, en cuyo caso el parámetro base predeterminado es 16. Esperemos que algún día este problema Será un recuerdo lejano.
+'08' === 8? ¡Cierto! Tal vez realmente necesites parseInttu código real, pero no para lo anterior.
Number('08')
0o undefinedy el número de la cadena empieza con un 0dígito no seguida de una xo X, a continuación, la aplicación puede, a su discreción, interpretar el número, ya sea como octal o como decimal. se anima a las implementaciones de interpretar los números en este caso como decimal. " ( mi énfasis)