¿Cuáles son los tipos de datos en JavaScript y cómo se clasifican?
Ver respuesta — intenta responderla en voz alta primero
Existen los tipos primitivos (string, number, boolean, null, undefined, symbol, bigint) y el tipo objeto (object), que incluye arreglos, funciones y objetos planos. Los primitivos se copian por valor; los objetos se copian por referencia.
JavaScript tiene 7 tipos primitivos:
string: texto, como"hola".number: números, tanto enteros como decimales, como42o3.14.boolean:trueofalse.undefined: una variable que se declaró pero no tiene ningún valor asignado.null: ausencia intencional de un valor.symbol: identificadores únicos (uso avanzado).bigint: enteros muy grandes.
Después está object, que agrupa objetos, arreglos y funciones.
La diferencia clave: los primitivos se copian por valor (cada variable obtiene su propia copia), mientras que los objetos se copian por referencia (varias variables pueden apuntar al mismo objeto).
console.log(typeof "hola"); // "string"
console.log(typeof 42); // "number"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (un error histórico del lenguaje)
console.log(typeof Symbol()); // "symbol"
console.log(typeof 10n); // "bigint"
console.log(typeof {}); // "object"
console.log(typeof []); // "object" (los arreglos son objetos)
console.log(typeof function(){});// "function"
// Primitivo: se copia por valor
let a = 1;
let b = a;
b = 2;
console.log(a); // 1 (a no cambió)
// Objeto: se copia por referencia
let obj1 = { x: 1 };
let obj2 = obj1;
obj2.x = 99;
console.log(obj1.x); // 99 (ambos apuntan al mismo objeto)
Decir que los arreglos son un tipo distinto. En realidad, typeof [] devuelve "object". Para comprobar si algo es un arreglo, se usa Array.isArray(valor). Otro error clásico: olvidar que typeof null es "object".
"JavaScript tiene siete tipos primitivos: string, number, boolean, null, undefined, symbol y bigint. Todo lo demás es un objeto, incluidos los arreglos y las funciones. Lo más importante en la práctica es que los primitivos se copian por valor y los objetos por referencia, lo que afecta cómo se comportan cuando los asignas o los pasas a funciones."
¿Qué imprime cada línea?
console.log(typeof NaN);
console.log(Array.isArray([1, 2, 3]));
Ver respuesta
typeof NaN es "number" (NaN significa "Not a Number", pero su tipo es number). Array.isArray([1,2,3]) es true.