← JavaScript

Fundamentos

¿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, como 42 o 3.14.
  • boolean: true o false.
  • 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."

Reto rápido

¿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.