Aprende a debuggear JavaScript con DevTools para corregir un error común: cuando los valores de los inputs se tratan como strings y, en lugar de sumar, se concatenan. Verás cómo usar break points, console, watcher y la coerción explícita con parseInt para obtener resultados numéricos correctos con confianza.
¿Cómo identificar el error con DevTools en JavaScript?
El recorrido inicia siguiendo el flujo: onclick dispara el trigger, luego las funciones recolectan los valores de los inputs, validan que no estén vacíos y calculan la suma. En el scope local se observa que las variables tienen valores, pero el resultado es incorrecto por un detalle de tipo de dato.
Revisa el scope y confirma que las variables guardan lo esperado.
Usa la console para inspeccionar el tipo: typeof sum devuelve "string".
Si los valores son strings, se produce concatenación: "10" + "20" → "1020".
El problema no es la lógica de la función, sino el tipo del dato que llega a la suma.
¿Qué revela la consola con typeof y watcher?
En la console: escribe typeof sum y verás que es un string.
Usa un watcher con typeof sum para monitorear el tipo mientras avanzas con el break point.
Prueba en consola la coerción explícita: parseInt(algo) cambia de string a número.
// Inspección rápida en consola:typeof sum;// "string"// Conversión explícita en consola:parseInt("20");// 20 (number)
¿Por qué ocurre la concatenación de strings en la suma?
Los inputs entregan valores como strings.
Al sumar strings, JavaScript realiza concatenación, no suma numérica.
Por eso aparece un resultado como "1020" en lugar de 30.
¿Cómo usar break points con event listener u onclick?
Coloca break points en el event listener o directamente en la función onclick para entrar al punto exacto.
Avanza línea por línea y observa los valores en el scope y en watchers.
Quita el break point desde el margen o el panel cuando termines y presiona play para continuar.
¿Cómo aplicar coerción explícita con parseInt para sumar números?
La solución es obligar el cambio de tipo de string a número antes de sumar. Esa es una coerción explícita con parseInt.
Convierte cada operando a número con parseInt.
Guarda los cambios desde source y continúa la ejecución.
Repite la prueba: por ejemplo, 10 + 20 → 30; 5 + 5 → 10.
// Antes: concatenaba porque numberOne y numberTwo eran strings// const sum = numberOne + numberTwo; // "1020"// Después: fuerza la suma numérica con coerción explícitaconst sum =parseInt(numberOne)+parseInt(numberTwo);
Consejos prácticos:
Edita en source y guarda: usa command S en Mac o el atajo en Windows.
Verifica que typeof sum ahora sea "number" tras aplicar parseInt.
Si el valor cambia a 30, la suma ya es numérica y no concatenación.
¿Qué buenas prácticas de debugging aceleran el hallazgo del problema?
Depurar requiere ir paso por paso, con atención al detalle. Estas acciones marcan la diferencia al buscar la línea que causa el fallo.
Define break points en el punto donde inicia el flujo: event listener u onclick.
Recorre la ejecución paso a paso y observa variables en el scope local.
Crea watchers para expresiones clave como typeof sum.
Usa la console para validar hipótesis rápido y probar coerción explícita.
Cambia el código solo cuando estés seguro del origen del error.
Vuelve a correr, prueba con casos simples como 5 + 5 y confirma el resultado.
Quita break points cuando ya no los necesites para evitar pausas.
¿Tienes dudas o alguna variación de este caso en tu proyecto? Cuéntalo en los comentarios y trabajemos la solución juntos.
> para hacer debuggin podemos ir a la siguiente ventana.
> vemos que tenemos una sección de Event Listener Breakpoints ahí podemos captura eventos en especifico de nuestra pagina web y una ves que suceda el evento que seleccionamos nos posicione en que parte del código sucede y a partir de ahí pode debuggear.
Gracias William por la explicación
Gracias!
DEBUGGING JS
En javascript typeof retorna el tipo de dato que tiene una variable.
El panel Scope te muestra las variables locales y globales actualmente definidas, junto con el valor de cada variable.
Buena explicacion.
Excelente explicacion
Otra forma de crear breakpoints desde JavaScript (Ya directamente desde tu editor de texto) es usando la palabra reservada debugger el cual muchos profesores usan en algunos otros cursos, de igual manera se esta´ra generando un breakpoint cuando se llegue a dicha linea ^^
Otra forma de hace la coerción expplícita de un String a Número es usar la función Number() y pasar la variable dentro de los paréntesis.
|Coerción explicita
|Es la forma en que nosotros obligamos a que un valor de un tipo cambie a otro valor de otro tipo, si necesitamos que ese valor sea de un tipo distinto.
4+"7";// 47 (string, porque JS hace la concatenación con elímbolo de +)4*"7"// 28 (Número, porque no se realiza ninguna concatenación)2+true;// 3 (porque, true equivale a un valor de 1) 2+false;// 2 (al contrario de true, false equicale a un valor de 0)
¿Cómo hacemos la coerción explícita?
var a =20;var b = a +"";//typeof b --> sería un stringvar c =String(a);//typeof c --> sería un stringvar d =Number(c);//typeof d --> sería un número
aquí el link que se uso en esta clase
gracias
Gracias, por el aporte.
Tengo que practicar mucho para poder acostumbrarme a usarlo
Igual. Aunque, te ahorrará mucho tiempo.
Tiene shortcuts, en mi caso oprimiendo F11 va avanzando paso a paso por cada linea del código y me ayuda a ir visualizando como progresa con solo apretar un botón del teclado. Los demás controles también tienen una tecla asiganda como F8 que corre el código hasta el siguiente breakpoint o al final del proceso.
A mi parecer sería mucho mejor colocar el parseInt en lo que retorna la función getNumber1 y getNumber2, pero aún así muy entendible!
yo oense lo mismo
Para los que usan vscode, acá dejo un artículo que nos muestra una extensión oficial (creada por Microsoft), para instalar Debugger for Chrome, para implementar mucha de la funcionalidad del browser dentro de nuestro editor de texto.
Debugger for Chrome
Yo retornaría el valor como un numero, ya que si lo quiero usar muchas veces tendría que estar haciendo un parseInt por cada vez.
pense lo mismo
Con Angular:
Trabajo en un startup con Next.js y me puse a debugear los breakpoints como aquí. Desafortunadamente este método no me sirve porque el código que aparece en dev tools es puro vanilla javascript; todo distinto a lo que escribí en Next. sad.
Es adicional al uso de DevTools. Con los operadores +, - antes de la cadena (sin espacio) también podemos hacer cohersión explicita a tipo number.
// Cohersión explicita string a numberconst val ="20";const positive =+val;// 20const negative =-val;// -20
A lo que se refería el profesor como **coerción ** es conversión, ++ya que la primera la realiza Javascript de forma implícita++, y cuando se hace de forma explícita se le llama conversión.
Fuente: MDN Web Docs
Gracias por puntualizar los conceptos.
¿Cuál es la diferencia entre usar parseInt(x) y Number(x)?
Hola Ramdhei,
Number() es un objeto, que como su nombre lo dice, permite trabajar con números en JS, cuenta con métodos internos para trabajar con ellos. En el contexto de la clase, Number() transforma valores de otro tipo a números
var a =newNumber('123');// a === 123 false. Es un string.var b =Number('123');// b === 123 true. Number() los convirtió a números.
Por otra parte parseInt() es una función que convierte un valor a un número entero especificando la base. Es muy usado para "ignorar" letras en una cadena de valores donde hay números. Por ejemplo:
var a ="1234HolaRamdhei";var b =parseInt(a);console.log(b);// Imprimirá -> 1234
Y yo matandome con la consola jajajaj SEVERA CLASE
Resumen de la clase
Very interesting chapter!!!
Excelente clase.
En impresionante la forma en que se usa el debugger para comprobar los errores que se puede tener en la programacion. Habia visto a muchos programadores hacer eso, pero yo no sabia. Ahora que lo se tengo ganas de usarlo mas seguido con mis proyectos que tengo guardado.