En el ecosistema de ECMAScript los valores se agrupan en dos grandes familias: primitivas y referencias.
Primitivas
Los tipos primitivos —también llamados simples— son undefined, null, boolean, number, string y symbol. Se almacenan directamente en la pila y ocupan un tamaño fijo.
Undefined
Únicamente existe el valor undefined. Una variable declarada sin inicializar adopta este valor.
let saludo;
console.log(saludo); // undefined
Null
Representa la ausencia intencionada de cualquier objeto. Se recomienda asignar null cuando una variable debería contener un objeto pero aún no lo hace.
let usuario = null;
console.log(usuario); // null
Boolean
Admite exclusivamente true y false. La conversión implícita obedece a la siguiente tabla:
| Tipo | → true | → false |
|---|---|---|
| Boolean | true | false |
| Undefined | — | undefined |
| String | cadana no vacía | "" |
| Number | ≠ 0 y ≠ NaN | 0, NaN |
| Object | cualquier objeto | null |
String
Las cadenas son inmutables; cualquier "modiifcación" genera una nueva instancia.
let lenguaje = "Java";
lenguaje += "Script"; // nueva cadena
console.log(lenguaje); // JavaScript
let edad = 25;
edad.toString(); // "25"
String(edad); // "25"
Number
Abarca enteros y decimales. Se pueden expresar en base 10, 8 u 16.
const MAX = Number.MAX_VALUE;
const MIN = Number.MIN_VALUE;
let flotante = 3.14e-2; // 0.0314
let entero = parseInt("42px"); // 42
let decimal = parseFloat("3.7abc"); // 3.7
console.log(NaN === NaN); // false
console.log(isNaN("abc")); // true
Symbol
Introducido en ES6 para generar identificadores únicos e inmutables.
const id1 = Symbol("id");
const id2 = Symbol("id");
console.log(id1 === id2); // false
Tipos por referencia
Object
// literal
let persona = { nombre: "Ana", edad: 30 };
// constructor
let coche = new Object();
coche.marca = "Tesla";
Array
let nums = [5, 3, 9];
nums.push(7); // [5,3,9,7]
nums.pop(); // devuelve 7 → [5,3,9]
nums.shift(); // devuelve 5 → [3,9]
nums.unshift(1); // [1,3,9]
let copia = nums.slice(1); // [3,9]
nums.splice(1, 1, 4); // [1,4,9]
console.log(nums.indexOf(4)); // 1
console.log(nums.includes(9)); // true
Date
let hoy = new Date();
console.log(hoy.getFullYear()); // año actual
console.log(Date.now()); // ms desde 1970
RegExp
let regex = /\d+/g;
console.log(regex.test("abc123")); // true
console.log("abc123".match(regex)); // ["123"]
Map
let mapa = new Map();
mapa.set("clave", 100);
mapa.set(42, {x: 1});
console.log(mapa.get(42)); // {x: 1}
console.log(mapa.size); // 2
for (let [k, v] of mapa.entries()) {
console.log(k, v);
}
Set
let colores = new Set(["rojo", "azul", "rojo"]);
colores.add("verde");
console.log([...colores]); // ["rojo","azul","verde"]
WeakMap y WeakSet
Almacenan referencias débiles; las claves deben ser objetos y no impiden la recolección de basura.
Objetos envoltorio y globales
Envoltorio (no recomendado)
let n = new Number(5); // objeto
let m = 5; // primitiva
console.log(typeof n); // "object"
console.log(typeof m); // "number"
Global
let uri = "https://ejemplo.com/ñoño";
let encoded = encodeURIComponent(uri);
console.log(encoded); // https%3A%2F%2Fejemplo.com%2F%C3%B1o%C3%B1o
eval("let x = 10; console.log(x);"); // 10
Math
console.log(Math.floor(4.9)); // 4
console.log(Math.max(2, 8, 5)); // 8
console.log(Math.random()); // 0 ≤ r < 1