La función parseInt de Javascript no parece funcionar por completo.
parseInt("01") returns 1
parseInt("02") returns 2
parseInt("03") returns 3
parseInt("04") returns 4
parseInt("05") returns 5
parseInt("06") returns 6
parseInt("07") returns 7
parseInt("08") returns 0
parseInt("09") returns 0
No puedes explicar eso. Darle una oportunidad. (jsFiddle)
Editar Dado que esta pregunta fue formulada y respondida, la "función" de usar de forma predeterminada la base octal ha quedado obsoleta. [ 1 ] [ 2 ]
javascript
salvador
fuente
fuente
You can't explain that.
Sí, puedes => developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Respuestas:
Esto se debe a que si un número comienza con un '0', se trata como base 8 (octal).
Puede forzar la base pasando la base como segundo parámetro.
Según los documentos , el segundo parámetro es opcional, pero no siempre se asume que sea 10, como puede ver en su ejemplo.
fuente
11
en base 8 está9
en base 10.09
no es un número de base 8 válido.Las llamadas a
parseInt
siempre deben especificar una base en el segundo argumento:Las versiones anteriores de JavaScript tratan las cadenas que comienzan con
0
octal (cuando no se especifica una base) y ni08
ni09
son números octales válidos.De la documentación de Mozilla :
Y del estándar ECMAScript 3 :
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.
fuente
Hay un parámetro Radix
Donde base es la raíz.
En este caso, está evaluando números base10 (decimales), por lo tanto, use
fuente
Esto no parece ser completamente válido en los nuevos navegadores. Internet Explorer 9 y 10 devolverán 8 si ejecuta 'parseInt ("08")' mientras que Internet Explorer 8 y versiones anteriores devolverán 0 (IE10 en modo peculiar también devolverá 0).
La última versión de Chrome también devuelve 8, por lo que deben haber cambiado la interpretación recientemente.
fuente
Este problema está obsoleto ahora. Pero aún puede usar radix in
parseInt
para convertir el número de otras bases en base-10. P.ej,devuelve
17
(que es base 10 de0010001
).fuente
Sugerencia: como ya sabe, cuándo se ha desaprobado el uso predeterminado de octal. Así es como lo solucionaría en navegadores heredados
fuente
El problema parece haber cambiado ahora en la mayoría de los navegadores.
Firefox 51.0.1 (64 bits)
Chrome 55.0.2883.95 (64 bits)
Safari 10.0 (12602.1.50.0.10)
=====
Práctica recomendada
Habiendo dicho eso, solo para estar en el lado más seguro y evitar problemas, use el parámetro base / radix como se sugiere en la respuesta aceptada .
Prueba adicional
Solo quería probar esto también, si el argumento no es una cadena. Chrome y Safari dan un resultado exacto. Firefox también devuelve el resultado adecuado, pero con una advertencia.
fuente