Cuidado con parseInt en javascript
Llamar a parseInt() antes de realizar operaciones aritméticas en javascript, para convertir en numéricos los valores y evitar que una suma se convierta en un concatenación, es de lo más común:
var a = '7';
var b = '11'
a + b >>>> '711';
parseInt(a) + parseInt(b) >>>> '18';
Sin duda se trata una función muy utilizada, los valores recogidos mediante DOM son devueltos como strings, y de gran importancia que a pesar de su sencillez esconde algunos secretos que pueden arrojar resultados aparentemente sin sentido bajo ciertas circunstancias:
parseInt('07') + parseInt('011') >>>> '16';
parseInt('07') + parseInt('08') >>>> '7';
A pesar de lo que pueda parecer, estos resultados no son fruto de ningún bug sino de una funcionalidad. Y es que los valores numéricos precedidos por un cero en javascript son interpretados como valores octales. Es muy importante tener esto en mente cuando vayamos a utilizar parseInt ya que puede dar lugar a equivocos:
- parseInt(‘011′) es equivalente a ‘9′ en decimal
- En parseInt(‘08′), ‘08′ es un valor incorrecto (el sistema octal acepta valores entre 0 y 7) y es traducido como 0
Para evitar estos quebraderos de cabeza deberemos asegurarnos de que los dígitos no van precedidos de un 0, o simplemente indicarle a parseInt que se trata de valores decimales haciendo uso de su segundo parámetro. Ejemplo:
parseInt(‘07′, 10) + parseInt(‘011′, 10) >>>> ‘18′;
parseInt(‘07′, 10) + parseInt(‘08′, 10) >>>> ‘15′;
Espero que os sea útil.
Posts relacionados:
