Tipos de datos en JavaScript: guía exhaustiva

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

Etiquetas: JavaScript ecmascript primitive-types reference-types Symbol

Publicado el 8-20 09:17