ECMAScript 9, lanzado en junio de 2018, incorporó características que simplifican el manejo de objetos, promesas y expresiones regulares. Dominar estas herramientas permite escribir código más limpio y eficiente, reduciendo líneas innecesarias y ganando control sobre la lógica asíncrona.
¿Cómo funciona el operador de reposo para extraer propiedades de un objeto?
El operador de reposo (rest operator) permite separar propiedades específicas de un objeto y agrupar el resto en una nueva variable [01:00]. Se utiliza con la sintaxis de tres puntos (...) dentro de una desestructuración.
Supongamos que tenemos un objeto con datos personales:
js
const user = {
name: 'Oscar',
age: 32,
country: 'MX'
};
Podemos extraer solo name y encapsular todo lo demás en otra variable:
js
const { name, ...all } = user;
console.log(name); // 'Oscar'
console.log(all); // { age: 32, country: 'MX' }
Esto es útil cuando necesitas excluir ciertas propiedades sin tener que desestructurar cada una por separado [02:05]. Por ejemplo, si solo necesitas nombre y edad, puedes extraer country y quedarte con el resto:
js
const { country, ...all } = user;
console.log(all); // { name: 'Oscar', age: 32 }
De esta forma se evita crear un objeto nuevo manualmente y volver a insertar valores.
¿Qué son las propiedades de propagación y cómo unen objetos?
Las propiedades de propagación (spread properties) permiten combinar dos o más objetos en uno solo utilizando también los tres puntos (...) [03:10].
js
const user = { name: 'Oscar', age: 32 };
const objectOne = { country: 'MX', ...user };
console.log(objectOne); // { country: 'MX', name: 'Oscar', age: 32 }
- El operador toma todas las propiedades de
user y las añade a objectOne.
- Se pueden anidar tantos objetos como sea necesario.
- El resultado es un nuevo objeto compuesto sin mutar los originales.
Esta característica reduce la verbosidad al momento de construir objetos a partir de múltiples fuentes de datos.
¿Cómo funciona Promise finally para controlar la ejecución asíncrona?
Promise.prototype.finally fue una de las adiciones más valoradas por la comunidad [04:20]. Permite ejecutar un bloque de código cuando una promesa se resuelve o se rechaza, sin importar el resultado.
js
const helloWorld = () => {
return new Promise((resolve, reject) => {
true
? resolve('Hello world')
: reject(new Error('testError'));
});
};
Al invocar la promesa se encadena .then(), .catch() y ahora .finally():
js
helloWorld()
.then(response => console.log(response))
.catch(error => console.log(error))
.finally(() => console.log('Finalizó'));
.then() maneja la respuesta exitosa.
.catch() captura los errores.
.finally() se ejecuta siempre al final, ideal para ocultar loaders, cerrar conexiones o limpiar estado.
Al agregar un setTimeout de tres mil milisegundos dentro del then, se puede observar que el mensaje de finally aparece justo después de que la promesa se cumple [06:15], confirmando que se ejecuta al término de todo el flujo.
¿Qué mejoras recibieron las expresiones regulares con grupos nombrados?
ES9 introdujo mejoras en Regex que permiten agrupar bloques y acceder a cada uno de ellos de forma individual [07:30]. Esto facilita la lectura y el mantenimiento de patrones complejos.
js
const regexData = /([0-9]{4})/([0-9]{2})/([0-9]{2})/;
const match = regexData.exec('2018/04/20');
const year = match[1]; // '2018'
const month = match[2]; // '04'
const day = match[3]; // '20'
console.log(year, month, day);
- Cada paréntesis define un grupo de captura.
- Se accede al primer grupo con
match[1], al segundo con match[2] y así sucesivamente.
- Permite trabajar con fechas, correos o cualquier patrón donde se necesite extraer segmentos específicos.
Estas mejoras hacen que el trabajo con Regex sea más predecible y legible, especialmente cuando se manejan múltiples fragmentos dentro de una misma expresión.
¿Ya utilizas finally en tus promesas o sigues trabajando solo con then y catch? Comparte tu experiencia en los comentarios.