Skip to content
tutorials

Tu JavaScript está obsoleto.

El lenguaje evoluciona más rápido de lo que crees, dejando atrás patrones comunes y soluciones provisionales. Probablemente sigas usando trucos para problemas que JavaScript resolvió hace años, o incluso meses.

Dani Roth
Tu JavaScript está obsoleto.

Las nuevas reglas de la inmutabilidad de arrays

El JavaScript moderno exige inmutabilidad, especialmente en frameworks como React que dependen de referencias de estado estables. Mutar un array directamente con métodos como sort() o reverse() rompe este contrato, lo que provoca actualizaciones de UI impredecibles y efectos secundarios difíciles de depurar. Estos métodos tradicionales modifican el array original en el mismo lugar, un anti-patrón crítico para una gestión de estado robusta y mantenible.

Resuelve este problema con nuevas alternativas inmutables. ECMAScript 2023 (ES14) introdujo toSorted() y toReversed(), que devuelven un nuevo array con los cambios, dejando el array original intacto. Esto elimina los efectos secundarios no deseados, simplificando las actualizaciones de estado y asegurando renderizados de componentes predecibles en toda tu aplicación.

Mejora aún más la inmutabilidad de los arrays con with(index, value). Este método reemplaza limpiamente un elemento en un índice específico, devolviendo un nuevo array sin mutar el original. Ofrece una alternativa clara y declarativa a las engorrosas llamadas a splice() o a las asignaciones directas arr[i] = val, promoviendo un estilo de codificación más funcional y menos propenso a errores.

Adopta estos métodos indispensables ahora. Se lanzaron como parte de ECMAScript 2023 (ES14) y son totalmente compatibles con los entornos de ejecución modernos, incluyendo Chrome 110+, Firefox 115+, Safari 16+ y Node.js 20+. Actualiza tus operaciones de arrays para el desarrollo moderno de JavaScript.

JSON.stringify está muerto para la clonación

Abandona el truco de clonación profunda JSON.parse(JSON.stringify(obj)) inmediatamente. Este método falla notoriamente con tipos de datos complejos, convirtiendo objetos Date en simples cadenas y descartando completamente los datos de Map y Set, dejándolos como objetos vacíos. Además, no puede manejar funciones, undefined, Infinity, NaN u objetos con referencias circulares, lo que provoca pérdida de datos silenciosa o errores en tiempo de ejecución.

En su lugar, adopta structuredClone(), la API moderna e integrada. Esta solución definitiva copia fielmente una amplia gama de tipos de datos complejos, incluyendo Map, Set, Date, RegExp, ArrayBuffer, Blob e incluso ImageData. Fundamentalmente, structuredClone() también navega y duplica objetos que contienen grafos circulares, proporcionando copias profundas robustas sin necesidad de bibliotecas externas o lógica de serialización personalizada.

Aunque es potente, structuredClone() tiene limitaciones menores y específicas: no puede clonar funciones, nodos DOM o propiedades con getters/setters personalizados. Sin embargo, para la gran mayoría de los datos de aplicaciones, proporciona un clon completo y que preserva los tipos. Haz de structuredClone() tu estándar de referencia para el 99% de los casos de uso de clonación profunda en JavaScript moderno, asegurando la integridad de los datos y un estado predecible.

El patrón de Promise que estabas esperando

Resuelve promesas desde un ámbito externo sin código repetitivo (boilerplate). Históricamente, gestionar la resolución de una Promise fuera de su constructor significaba declarar variables resolve y reject de antemano. Este patrón, que requiere asignaciones de variables externas, ensucia el código y hace que el control de la promesa sea opaco.

Observa el patrón heredado común:

let externalResolve, externalReject;
const externalPromise = new Promise((resolve, reject) => { externalResolve = resolve; externalReject = reject;
});
// Más adelante en tu código...
externalResolve('¡Datos recibidos!');

Este enfoque te obliga a exponer las funciones internas de la promesa de forma global o en un ámbito más amplio, aumentando el potencial de uso indebido y haciendo que el flujo de control sea más difícil de rastrear.

Presentamos Promise.withResolvers(), un nuevo método estático que simplifica esto enormemente. Introducido en ECMAScript 2024, devuelve un objeto que contiene la promesa, su función resolve y su función reject. Se acabó la pre-declaración o las fugas de ámbito.

Implementa Promise.withResolvers():

const { promise, resolve, reject } = Promise.withResolvers();
// ... ahora 'promise' puede ser devuelta, y 'resolve'/'reject' llamados en otro lugar.
resolve('Operación completada.');

Este método limpia drásticamente los patrones asíncronos donde una promesa debe esperar un disparador externo, como un usuario haciendo clic en un botón o un mensaje entrante de WebSocket. Está disponible en Chrome 120+, Firefox 121+ y Node.js 21+. Para obtener más detalles fundamentales sobre JavaScript y la sintaxis en evolución, consulta recursos como Lexical grammar - JavaScript - MDN Web Docs. Adopta el JavaScript moderno para un control asíncrono más limpio y robusto.

¿Te está gustando? Recibe uno así en tu bandeja cada mañana.

un correo al día · date de baja en dos clics · sin rastreadores de terceros

Secretos de sintaxis ocultos a plena vista

Mejora la legibilidad de los números usando separadores numéricos, una característica de ES2021. Aclara instantáneamente literales grandes como 1_000_000_000 en comparación con 1000000000. Esta sintaxis funciona para cualquier base numérica (decimal, binaria, octal, hexadecimal y BigInts) sin añadir sobrecarga de rendimiento. Los guiones bajos no pueden aparecer al principio, al final o junto a un punto decimal, ni pueden ir dos seguidos. Fundamentalmente, esta es una separación visual solo para el código; el análisis de cadenas falla, ya que Number('1_000') devuelve NaN y parseInt('1_000') produce 1.

Toma el control explícito sobre los bucles anidados con sentencias etiquetadas. Declara myLoop: for (...) para asignar una etiqueta a un bucle externo. Desde dentro de cualquier bucle interno, break myLoop; sale de toda la estructura etiquetada en un solo paso explícito. Esta alternativa limpia elimina las variables de bandera repetitivas para escenarios de flujo de control complejos, mejorando significativamente la claridad del código y reduciendo posibles errores por interrupciones omitidas.

Estos no son peculiaridades oscuras del lenguaje para concursos de trivia. Aprovecha los separadores numéricos y las sentencias etiquetadas como herramientas prácticas para escribir código autodocumentado y mantenible. Enfócate en la ergonomía del desarrollador y la claridad, haciendo que tu base de código JavaScript sea inmediatamente más comprensible, robusta y fácil de entender para futuros colaboradores.

Preguntas frecuentes

¿Por qué son importantes los métodos de matriz inmutables como toSorted()?

Evitan efectos secundarios accidentales al devolver una nueva matriz en lugar de modificar la original. Esto es crucial para una gestión de estado predecible en marcos modernos como React, que dependen de la inmutabilidad para detectar cambios.

¿Cuándo debería usar structuredClone() en lugar del truco JSON.stringify?

Casi siempre. structuredClone() es una API nativa y robusta que maneja correctamente tipos de datos complejos como Dates, Maps, Sets e incluso referencias circulares. El truco de JSON rompe estos tipos y debe considerarse un anti-patrón heredado.

¿Está Promise.withResolvers() disponible en todas partes?

No, es una característica muy nueva de ECMAScript 2024. Es compatible con las versiones más recientes de los principales navegadores (como Chrome 119+) y Node.js (v22+). Consulta siempre las tablas de compatibilidad si necesitas dar soporte a entornos más antiguos.

¿Se pueden usar separadores numéricos al analizar cadenas?

No. Los separadores numéricos son una característica exclusiva para literales numéricos en tu código fuente. Intentar analizar una cadena que contiene un guion bajo con Number('1_000') o parseInt('1_000') resultará en NaN o en un valor incorrecto.

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only