El problema viene dado porque en JavaScript el símbolo de concatenar coincide con el de la suma “+” y al sumar dos variables que teclea el usuario en lugar de devolver la suma de sus valores concatena esos valores porque lo trata como dos strings. Esto no ocurre cuando sumas dos variables a las que les asignamos sus respectivos valores, ya que en ese caso si reconoce los números como tipo numérico.
Esto se resuelve utilizando parseInt() para números enteros o parseFloat() para números con decimales. Con esto se convierte a tipo numérico y resuelve la operación de la suma.
Ejemplo
Ejecutando este script vemos que concatena los valores que introducimos en lugar de sumarlos.
- Código: Seleccionar todo
<script type="text/javascript">
var i = prompt("Teclea un numero entero");
var j = prompt("Teclea otro numero entero");
document.write("La suma de las variables i + j da: " + (i + j));
</script>
Aquí resolvemos correctamente la suma usando parseInt.
- Código: Seleccionar todo
<script type="text/javascript">
var i = parseInt(prompt("Teclea un numero entero"));
var j = parseInt(prompt("Teclea otro numero entero"));
document.write("La suma de las variables i + j da: " + (i + j));
</script>
Utilizando parseInt si el usuario introduce decimales redondea y no lo calcula correctamente. Para evitar esto, en el ejemplo anterior usamos parseFloat en lugar de parseInt y resolverá correctamente con decimales la operación de la suma.