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 parseInt
tu código real, pero no para lo anterior.
Number('08')
0
o undefined
y el número de la cadena empieza con un 0
dígito no seguida de una x
o 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)