Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Duda] Un bug en Javascript?

Tengo una duda respecto a los tipos de datos en javascript. En la clase vi que al solicitar un numero al usuario con la sentencia promt, este lo asume como un string. El programa continua con la comparacion entre el numero del usuario y el numero secreto siendo este ultimo de tipo number. Como es posible que no arroje un error si esta comparando tipos de datos diferentes? Es un error que presenta el lenguaje? Como debe manejarse esta situacion? Se debe declarar el tipo de dato a cada variable? De antemano muchas gracias para quien pueda ayudarme.

2 respuestas
solución!

¡Hola Jeinfferson!

Entiendo tu duda, y es una pregunta muy común cuando comienzas a programar. Vamos a aclararlo de manera sencilla:

¿Por qué prompt devuelve un string?

Cuando usas la función prompt para pedir un dato al usuario, lo que ingresa siempre será tratado como texto (o string), incluso si el usuario escribe un número.

Ejemplo:

let entrada = prompt("Ingresa un número:");
console.log(typeof entrada); // Resultado: "string"

Aunque el usuario haya escrito un número como "5", el valor de entrada será de tipo string y no de tipo número.


¿Qué pasa cuando comparas un texto con un número?

JavaScript es un lenguaje con tipado dinámico, lo que significa que las variables no tienen un tipo fijo y pueden cambiar según el valor que les asignes. Además, JavaScript intenta convertir automáticamente los tipos cuando realiza operaciones o comparaciones. Esto se llama coerción de tipos.

Por ejemplo:

let numeroSecreto = 7;
let entrada = "7";

if (numeroSecreto == entrada) {
    console.log("¡Es igual!"); // Esto se ejecuta porque JavaScript convierte "7" a número
}

Aunque JavaScript convierte "7" a número para hacer la comparación, esta característica de coerción puede ser confusa y no siempre da el comportamiento que esperamos.


¿Cómo manejar correctamente los tipos de datos?

Aunque JavaScript facilita el trabajo al hacer estas conversiones automáticas, es recomendable ser explícito con los tipos de datos cuando sea necesario:

  1. Convertir el dato ingresado por el usuario

Para asegurarte de que el dato sea del tipo correcto, puedes usar funciones como Number() o parseInt() para convertir el string a un número:

let entrada = prompt("Ingresa un número:");
entrada = Number(entrada); // Ahora es un número
console.log(typeof entrada); // Resultado: "number"
  1. Usar comparaciones estrictas (===)

El operador === verifica tanto el valor como el tipo de dato, evitando la coerción automática. Esto hace que las comparaciones sean más predecibles:

if (numeroSecreto === entrada) {
    console.log("¡Adivinaste el número!");
} else {
    console.log("Inténtalo de nuevo.");
}
  1. Validar los datos ingresados

Es una buena práctica verificar que el dato sea del tipo que esperas. Por ejemplo, puedes asegurarte de que el usuario haya ingresado un número:

if (!isNaN(entrada)) {
    console.log("¡Es un número válido!");
} else {
    console.log("Por favor, ingresa un número.");
}

Sobre la característica de JavaScript

JavaScript es un lenguaje de tipado dinámico, lo que significa que no tienes que declarar el tipo de una variable antes de usarla. Las variables pueden cambiar de tipo dependiendo del valor que les asignes, y el lenguaje hace conversiones automáticas de tipos cuando es necesario. Aunque esto puede hacer el código más flexible y fácil de escribir, también puede llevar a errores si no tenemos cuidado con los tipos de datos que estamos usando en las comparaciones y operaciones.

¡Espero que esto aclare tu duda! Sigue practicando, que la programación es un proceso de aprendizaje continuo, y todas estas dudas forman parte de tu crecimiento como programador. Si tienes más preguntas, no dudes en preguntar.

Si este post te ayudó, por favor, marca como solucionado ✓. ¡Es de gran ayuda para la comunidad!

Hola Lara. Muchas gracias por la explicacion. Ahora todo mucho mas claro.