Dynamic import

Nos permite importación de elemento dinamicamente, para poder llamar piezas de código.

En otras palabras ya no es necesario poner el import desde el comienzo del documento, si no que se lo puede importar desde cualquier parte del documento.

//file.js
export function hello(){
    console.log('Hola mundo')
}
//index.js
const button = document.getElementById('btn');

button.addEventListener("click", async function() {
    const module = await import("./file.js");
    module.hello();
});
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button id="btn">File</button>
    <script type="module" src="index.js"></script>
</body>
</html>

En el ejemplo importamos el archivo file.js desde la declaración de la variable y no al inicio del documento, para realizar este import se usa el asyn/await.

BigInt

Es un número mas grande que $2^{53}$ y podemos representarlo de forma mas fiable. Existen dos formas de trabajar con estos número y las mostramos a continuación

const aBigNumber = 9007199254740991n;
const anotherBigNumber = BigInt(9007199254740991);

console.log(aBigNumber);
console.log(anotherBigNumber);

Primise.allSettled

Nos devuelve una promesa que se resuelve después de que todas las promesas dadas han sido cumplidas o rechazadas en una serie de objetos que se describe el resultado de cada promesa.

const promise1 = new Promise((resolve,reject) => reject("reject"));
const promise2 = new Promise((resolve,reject) => resolve("resolve"));
const promise3 = new Promise((resolve,reject) => resolve("resolve 1"));

Promise.allSettled([promise1,promise2,promise3])
    .then(response => console.log(response))

//salida>
// 0: {status: 'rejected', reason: 'reject'}
// 1: {status: 'fulfilled', value: 'resolve'}
// 2: {status: 'fulfilled', value: 'resolve 1'}
// length: 3

globalThis

Históricamente, acceder al objeto global ha requerido una sintaxis diferente en diferentes entornos de JavaScript. En la web puede usar windowselfframes- pero en Web Workers solo self funcionará. En Node.js ninguno de estos funciona, y en su lugar debe usar global. La palabra clave this podría usarse dentro de funciones que se ejecutan en modo no estricto, pero this estará undefineden módulos y dentro de funciones que se ejecutan en modo estricto.

La propiedad globalThis proporciona una forma estándar de acceder al thisvalor global (y, por lo tanto, al propio objeto global) en todos los entornos. A diferencia de propiedades similares como windowself, está garantizado que funciona en contextos de ventana y no ventana. De esta manera, puede acceder al objeto global de manera coherente sin tener que saber en qué entorno se está ejecutando el código.

Operador de null ??

Es un operador lógico que nos devuelve su operando del lado derecho cuando el operando del lado izquierdo es null o undefined, caso contrario nos devuelve el del lado izquierdo

const foo = null ?? "Default string"
console.log(foo)
//salida> Default string

const foo = "asd" ?? "Default string"
console.log(foo)
//salida> asd

Optional chaining ?.