Tipos de datos
Números, textos, booleanos, arrays y objetos: qué tipos de datos existen, en qué se diferencian y por qué confundirlos provoca errores silenciosos en tu código.
Definición rápida
Un tipo de dato define qué clase de valor guarda una variable y qué operaciones tienen sentido con él: número, texto, booleano, lista u objeto.
Un tipo de dato indica qué clase de valor guarda una variable y, sobre todo, qué operaciones tienen sentido con ese valor. Sumar dos números tiene sentido; sumar dos nombres de persona no. Casi todos los errores raros de los primeros programas —resultados como "55" o NaN— son confusiones de tipo.
Los cinco tipos que usarás cada día
const edad = 34; // number
const nombre = "Ana"; // string
const esMayorDeEdad = true; // boolean
const notas = [7, 8, 9]; // array
const alumno = { nombre: "Ana" }; // object
- number: enteros y decimales, sin distinción.
3,-12,0.5. - string: texto entre comillas.
"Ana","7"(esto es texto, no número). - boolean: solo
trueofalse. Es la base de los condicionales. - array: una lista ordenada de valores accesibles por posición. Ver arrays.
- object: un conjunto de propiedades con nombre. Ver objetos.
A eso se añaden dos valores que representan ausencia: undefined (una variable declarada sin valor, o una propiedad que no existe) y null (un vacío puesto a propósito por ti).
El error de tipos que comete todo el mundo
const a = 5;
const b = "5";
console.log(a + b); // "55" → concatenó texto
console.log(a + Number(b)); // 10 → suma correcta
console.log(a * b); // 25 → aquí sí convirtió a número
JavaScript intenta «ayudarte» convirtiendo tipos por su cuenta, y con + la conversión va hacia el texto. El síntoma clásico aparece con datos que vienen de un formulario o de una API: parecen números pero son cadenas.
La otra cara del problema es NaN (Not a Number), que aparece cuando pides una operación numérica imposible:
console.log(Number("hola")); // NaN
console.log(10 / "dos"); // NaN
Si ves NaN en tu salida, busca hacia atrás el punto donde un texto entró donde debía haber un número.
Cómo saber qué tipo tienes delante
typeof 42; // "number"
typeof "42"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof { a: 1 }; // "object"
typeof [1, 2, 3]; // "object" ← cuidado
Array.isArray([1, 2]) // true ← esta es la forma correcta
Cuando un ejercicio falla sin motivo aparente, un console.log(typeof valor) bien puesto suele resolver el misterio en diez segundos.
Convertir de un tipo a otro
Number("3.5"); // 3.5
Number(""); // 0
parseInt("12px"); // 12 (se queda con el número inicial)
String(42); // "42"
Boolean(0); // false
Presta atención a Number(""), que devuelve 0: un campo vacío puede colarse como un cero perfectamente válido y descuadrar un total sin que salte ningún error.
Por qué esto importa aunque el lenguaje sea flexible
JavaScript no te obliga a declarar tipos, pero los tipos existen igual. La diferencia es que los errores no aparecen al escribir, sino en ejecución y a veces solo con ciertos datos. Trabajar con conciencia de tipos —validar lo que entra, convertir en el borde y no en medio del cálculo— es el hábito que evita esa clase de fallos.
Cómo se practica esto en el curso
El módulo 2 introduce números, textos y booleanos con console.log, y los primeros ejercicios autocorregibles ya obligan a manejar tipos con cuidado: calcular una propina, un total con IVA o un promedio ponderado. Los tests comprueban el tipo exacto del valor devuelto, así que un "10" en lugar de 10 no cuela. Es gratis: mira el temario para ver la secuencia completa.
Preguntas frecuentes
¿Cuántos tipos de datos hay en JavaScript?
Los que usarás a diario son cinco: number, string, boolean, array y object. Existen otros (undefined, null, symbol, bigint), pero al empezar solo necesitas reconocer undefined y null como ausencia de valor.
¿Por qué 5 + "5" da "55"?
Porque uno de los operandos es texto y JavaScript convierte el número a texto para concatenar. Es el error de tipos más habitual: convierte el texto a número con Number(valor) antes de sumar.
¿Cómo compruebo de qué tipo es un valor?
Con typeof valor. Ojo con los arrays: typeof devuelve object para ellos, así que para arrays se usa Array.isArray(valor).