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.

Compartir:
  • Facebook
  • Twitter
  • Meneame
  • Google Bookmarks
  • del.icio.us
  • BarraPunto
  • Bitacoras.com
  • Netvibes
  • MySpace
  • Technorati
  • email
  • PDF

Posts relacionados:

  1. webtips 03: alternativas a sIFR en javascript

Deja un comentario

You must be logged in to post a comment.