Funciones que veremos en Javascript este 2021
En el momento de escribir este artículo, las siguientes características de la propuesta de JavaScript se han convertido en la etapa 4 y es casi seguro que se incluirán en ES2021. Ya se pueden comenzar a usar en las últimas versiones de navegadores, Node.js y Babel.
Nota: ECMAScript es el estándar en el que se basa JavaScript, administrado por el comité TC39. ECMAScript siempre fue un nombre no deseado que hace que todo sea confuso para los principiantes. La gente suele hablar de las funciones de JavaScript, pero se refiere a la especificación ECMAScript.
Separadores numéricos
Habilita los guiones bajos (_, U + 005F) como separadores en literales numéricos para mejorar la legibilidad y no tener semántica en tiempo de ejecución. Funciona para literales numéricos (int, bigint, float), partes fraccionarias y exponentes.
1_000_000_000 // números decimales 0b1010_0001 // números binarios 101_475_938.38 // números de punto flotante 0.000_001 // en parte fraccionaria 1e10_000 // como exponente
Asignación lógica
Admite la asignación lógica con los nuevos operadores && =, || = y ?? =. Las asignaciones lógicas solo realizan una asignación si la operación lógica evalúa el lado derecho.
// Falso: false, 0, -0, 0n, "", null, undefined y NaN // Verdadero: todos los valores son verdaderos a menos que se defina como falso // Null: null, undefined a || = b // Asignación lógica OR // Es lo mismo que: a || (a = b); // Solo asigna si 'a' es falso a && = b // Asignación lógica AND // Es lo mismo que: a && (a = b); // Solo asigna si 'a' es verdadero a ?? = b // Asignación de nulidad lógica // Es lo mismo que: a ?? (a = b); // Solo asigna si 'a' es nulo
Referencias débiles
Esta función contiene dos objetos avanzados WeakRef y FinalizationRegistry. Estas interfaces se pueden utilizar de forma independiente o conjunta, según el caso de uso. Su uso correcto requiere una cuidadosa reflexión, y es mejor evitarlos si es posible.
Un WeakRef es un objeto que se usa para hacer referencia a un objeto de destino sin preservarlo de la recolección de basura. WeakRefs puede eliminar la referencia para permitir el acceso al objeto de destino, si el objeto de destino no ha sido reclamado por la recolección de basura.
// Crea un objeto WeakRef que hace referencia a un objeto dado const ref = new WeakRef(objetoDestino) // Devuelve el objeto de destino de la instancia de WeakRef, o indefinido si el objeto de destino ha sido recolectado como basura const obj = ref.deref()
Un objeto FinalizationRegistry permite solicitar una devolución de llamada cuando un objeto se recolecta como basura.
// Crea un objeto de registro que usa la devolución de llamada dada const registro = new FinalizationRegistry([callback]); // Registre un objeto con una instancia de registro para que, si el objeto se recolecta como basura, se puede llamar a la devolución de llamada del registro registro.register(objetivo, valorRetenido, [tokenNoRegistrado]); // Anular el registro de un objeto de destino de una instancia de registro registro.unregister(tokenNoRegistrado);
Promise.any()
Promise.any() acepta una serie de promesas y devuelve una promesa que se cumple con la primera promesa dada que se cumple, o se rechaza con un AggregateError que contiene las razones de rechazo si se rechazan todas las promesas dadas.
Este método es útil para devolver la primera promesa que se cumple. No espera a que las otras promesas se completen una vez que encuentra una.
Promise.any(promises).then( (first) => { // Cualquiera de las promesas se cumplió. }, (error) => { // Todas las promesas fueron rechazadas. } )
String.prototype.replaceAll()
Actualmente no hay forma de reemplazar todas las instancias de un substring en un string sin el uso de una expresión regular global. String.prototype.replace solo afecta a la primera aparición cuando se usa con un string.
String.prototype.replaceAll() daría a los desarrolladores una forma sencilla de realizar esta operación básica común.
'aabbcc'.replaceAll('b', '.') // 'aa..cc' 'aabbcc'.replaceAll(/b/g, '.') // 'aa..cc'