Ir al contenido
angel.library

Si estás aprendiendo, recorre esta sección en orden: texto, números, arrays, objetos y colecciones. Si vienes a recordar una API, comienza por la intención y abre su documento.

Cada referencia responde cinco preguntas:

  1. ¿Sobre qué valor se llama?
  2. ¿Qué argumentos recibe?
  3. ¿Qué devuelve exactamente?
  4. ¿Muta el valor original?
  5. ¿Qué caso de uso justifica elegirla frente a una alternativa?
const source = [3, 1, 2]
const result = source.toSorted((a, b) => a - b)
result // [1, 2, 3] ← retorno
source // [3, 1, 2] ← no mutó
Valor o APIDocumentoPreguntas que resuelve
StringStringsbuscar, cortar, reemplazar, normalizar y trabajar con Unicode
Number, BigInt, MathNúmeros y Mathconvertir, validar, redondear, calcular y manejar precisión
ArrayArraystransformar, filtrar, buscar, ordenar, acumular y copiar
ObjectObjetosclaves, desestructuración, copia, agrupación y descriptores
Map, Set, WeakMap, WeakSetColeccionesíndices dinámicos, unicidad y referencias débiles
Date, RegExp, IntlFecha, patrones e internacionalizacióninstantes, coincidencias y presentación localizada
ErrorErrores y depuraciónlanzar, capturar, clasificar, agregar causa y limpiar
PromiseCódigo asíncronoesperar, combinar, cancelar y manejar carreras
ArrayBuffer, TypedArray, DataViewDatos binariosbytes, vistas, endianness, transferencia y memoria compartida
Iterator, generatorsIteradoresproducir, transformar y consumir valores bajo demanda
Symbol, Proxy, ReflectMetaprogramaciónpersonalizar protocolos e interceptar operaciones
Quiero…Empieza por
comprobar tipotypeof, Array.isArray, Number.isFinite, instanceof
convertir entradaString, Number, BigInt, Boolean, parseInt, parseFloat
usar un valor predeterminado??, parámetros predeterminados o desestructuración
copiar sin mutar el primer nivelspread, slice, toSorted, toSpliced, with
clonar datos compatibles profundamentestructuredClone
transformar todos los elementosmap
conservar algunos elementosfilter
encontrar unofind o findLast
comprobar una condiciónsome o every
acumularreduce o un for...of explícito
eliminar duplicadosnew Set(values)
agruparObject.groupBy o Map.groupBy
indexar por una clave de cualquier tipoMap
ordenar texto para personasIntl.Collator
formatear moneda, fecha o unidadesIntl.NumberFormat, Intl.DateTimeFormat
escapar texto para construir una RegExpRegExp.escape en runtimes compatibles
procesar una fuente sin materializarlagenerator o Iterator helpers
combinar tareas asíncronasPromise.all, allSettled, any o race

Estas llamadas se parecen, pero viven en lugares distintos:

Array.isArray(value) // método estático de Array
array.map(callback) // método heredado de Array.prototype
new Map(entries) // construcción de una instancia
Object.keys(object) // método estático que recibe un objeto
FormaLectura correcta
Type.method(value)utilidad del constructor o namespace
value.method()método disponible en la cadena de prototypes
new Type()crear una instancia construible
propertydato; no se invoca con ()

Math y JSON son namespaces: no se crean con new. Symbol y BigInt se llaman como funciones, pero tampoco son constructores.

El objeto global cambia de nombre entre runtimes (window, self, global), pero globalThis ofrece una referencia estándar cuando realmente necesitas acceder a él.

GlobalUsoRecomendación
globalThisobjeto global del entorno actualevita depender de window en código compartido
undefined, NaN, Infinityvalores especialesnormalmente aparecen como resultado, no se construyen
parseInt, parseFloatconversión parcial desde textoprefiere Number.parseInt y Number.parseFloat por claridad
isNaN, isFinitecomprobación con coerciónprefiere Number.isNaN y Number.isFinite
encodeURI, decodeURIURI completano codifica separadores estructurales
encodeURIComponent, decodeURIComponentcomponente de una URIútil para una pieza; URLSearchParams suele ser más seguro
structuredCloneclonación estructuradaconserva varios built-ins y ciclos; no clona funciones
globalThis.setTimeout === setTimeout // true en runtimes que exponen timer global
Number.isFinite("10") // false
isFinite("10") // true por coerción
encodeURIComponent("css & js")
// 'css%20%26%20js'
new URLSearchParams({ topic: "css & js" }).toString()
// 'topic=css+%26+js'

eval(code) y Function(code) interpretan texto como código. Dificultan optimización y análisis, y pueden convertir datos no confiables en ejecución arbitraria. No son parsers de JSON, expresiones matemáticas ni plantillas; usa una herramienta diseñada para el formato permitido.

NecesidadEstructura inicial
secuencia ordenada con índicesArray
entidad con campos conocidosobjeto
pares con claves dinámicas o no stringMap
pertenencia y valores únicosSet
metadata que no debe mantener vivo un objetoWeakMap
bytes y números de tamaño fijoTypedArray
secuencia lazy o potencialmente infinitaiterador

No elijas por costumbre. Un array de objetos puede ser fácil de renderizar, pero buscar repetidamente por id es más directo con un Map. Un Set expresa pertenencia mejor que array.includes cuando hay muchas consultas.

Los nombres no siempre revelan si una operación modifica el receptor:

MutaAlternativa sin mutación
sort()toSorted()
reverse()toReversed()
splice()toSpliced()
asignar array[index]array.with(index, value)
Object.assign(target, source)Object.assign({}, source) o spread
map.set, set.addcrear otra colección y modificar la copia

Una operación “sin mutación” puede conservar referencias internas. Spread, slice, map y los métodos to... realizan copias superficiales.

Muchos métodos reciben (value, index, collection). No pases una función existente sin verificar cómo interpreta todos los argumentos.

;["10", "11", "12"].map(Number)[
// [10, 11, 12]
("10", "11", "12")
].map(Number.parseInt)
// [10, NaN, 1]

map entrega índice como segundo argumento y parseInt lo interpreta como radix. Expresa la intención:

;["10", "11", "12"].map((value) => Number.parseInt(value, 10))
// [10, 11, 12]

La especificación ECMAScript publica ediciones anuales, pero tu producto se ejecuta en versiones concretas de navegadores o runtimes. Entre las APIs recientes estables están Iterator helpers, RegExp.escape, Promise.try y Float16Array en ECMAScript 2025, además de Math.sumPrecise, Iterator.concat, Error.isError, Array.fromAsync, conversiones de Uint8Array, upsert de Map y mejoras de JSON en ECMAScript 2026. La gestión explícita de recursos y Temporal están previstas para ECMAScript 2027.

Antes de adoptar una API:

  1. comprueba los runtimes declarados por el proyecto;
  2. revisa compatibilidad en documentación oficial;
  3. decide si necesitas transpilar, polyfill o una implementación equivalente;
  4. añade una prueba en el entorno mínimo soportado.

Cuando olvides una API, evita buscar solo su nombre. Formula la pregunta completa:

Quiero ordenar números sin mutar el array original.

Eso conduce a toSorted((a, b) => a - b) y deja claras las tres decisiones: intención, comparación numérica y ausencia de mutación.