ES se actualiza e su versión 2021, agregando mejoras de rendimiento y, sobre todo, features a nivel lenguaje. Les dejamos un listado para ir viendo de que se trata.
Separadores Numéricos
Una gran novedad para cuando programamos con números grandes y necesitamos separarlos en grupos de decimales. En esta versión el caracter guión-bajo empleado en datos de tipo numérico será utilizado para separar digitos. Se trata solo de una forma de escritura visual, no afecta ni rendimiento ni al sistema en si:
1_000_000 // Así podemos escribir el número 1 millón de forma clara
1_234_567.89 // Y al ser un número sigue aceptando decimales
0.000_000_001 // Incluso sirve para separar número decimales muy chicos
Función replaceAll
Como ocurre con otros lenguajes, finalmente vamos a poder utilizar una función para reemplazar todas las concurrencias de un string sin recurrir a regex. No se trata de una versión más optimizada, en esencia es lo mismo que ya teníamos pero a nivel sintaxis está bastante mejor.
'abc'.replace(/a/g
, '1') // Imprime '1bc'
'abc'.replaceAll('a', '1') // Imprime '1bc'
Operadores Lógicos al Asignar variables
Se presentan nuevos operadores lógicos al momento de asignar variables, lo que pretende simplificar la estructura de los IF para determinadas acciones. Tendremos tres opciones, ||= que asignará el valor siempre y cuando la condición previa sea falsa; &&= que asignará el valor siempre y cuando la condición previa sea verdadera; y ??=.
// Así lo solemos hacer en JS
if (!var1) {
var1 = 1;
}
// Así lo podemos hacer con el operador lógico, es equivalente
var1 ||= 1;
Promesas
La promesas ahora podrán ser de tipo any y utilizar objetos de tipo AggregateError para definir errores en los request:
Promise.any([
fetch('https://hola.mundo/').then(() => 'home'),
fetch('https://hola.mundo/blog').then(() => 'blog')
]).then((r) => {
// Todos los request se ejecutaron bien
console.log(r);
}).catch((error) => {
// Todos los request fueron rechazados
console.log(error);
});
Nuevos Objetos
Nuevos objetos disponibles, concretamente tendremos dos: WeakRef y FinalizationRegistry. Con WeakRef podremos tener una referencia "débil" a un objeto ya existente, de esa manera al compararlos entre sí por más que contengan el mismo contenido serán distintos.
// t y wr no son considerados el mismo objeto
let t = {};
let wr = new WeakRef(t);
Por su parte, FinalizationRegistry permite limpiar el callback de un objeto para evitar que se almacene en un gargabe collector (similar a las subscripciones de Observables en RxJS).
// Creación de un registro
const registry = new FinalizationRegistry(value => {
// ...
});
registry.register(myObject, "hola mundo", myObject);
// Si ya no es necesario, podemos limpiar el objeto previamente registrado
registry.unregister(myObject);