Como desarrollador, es fundamental estar al día con los últimos avances en JavaScript para escribir código eficiente, moderno y escalable. En esta publicación, exploraremos 8 conceptos nuevos de JavaScript que deberías conocer y empezar a usarlo en tus proyectos. 

1. Encadenamiento Opcional (?.)

Introducido en ECMAScript 2020, el encadenamiento opcional te permite leer el valor de una propiedad ubicada profundamente dentro de una cadena de objetos conectados sin tener que verificar que cada referencia en la cadena sea válida. Ejemplo:

let user = { profile: { name: 'Carlos' } };
let userName = user?.profile?.name;
console.log(userName); // Carlos

2. Fusión Nula (??)

También introducido en ECMAScript 2020, el operador de fusión nula regresa el primer operando si no es nulo o indefinido, y el segundo operando en caso contrario. Ejemplo:

let valor = null ?? 'Valor por defecto';
console.log(valor); // Valor por defecto

3. BigInt

BigInt es un nuevo tipo de dato numérico en JavaScript usado para representar enteros con precisión arbitraria, permitiendo cálculos precisos con números grandes. Ejemplo:

const bigNum = 1234567890123456789012345678901234567890n;
console.log(bigNum + 1n);

4. globalThis

El nuevo objeto global, globalThis, proporciona una forma de acceder al objeto global de una manera compatible con los entornos modernos de JavaScript. Ejemplo:

console.log(globalThis);

5. matchAll()

Un nuevo método en el prototipo de String, matchAll() devuelve un iterador que produce coincidencias de una expresión regular contra una cadena, incluyendo grupos de captura. Ejemplo:

const texto = 'El teléfono de Juan es 123-456-7890 y el de Ana es 987-654-3210';
const regex = /\d{3}-\d{3}-\d{4}/g;
const coincidencias = texto.matchAll(regex);
for (const match of coincidencias) {
  console.log(match[0]);
}

6. Promise.allSettled()

Un nuevo método en la API de Promesa, allSettled() devuelve una promesa que se resuelve cuando todas las promesas en un arreglo se hayan resuelto o rechazado. Ejemplo:

const promesa1 = Promise.resolve('Promesa 1 resuelta');
const promesa2 = Promise.reject('Promesa 2 rechazada');
Promise.allSettled([promesa1, promesa2]).then(resultados => console.log(resultados));

7. String.prototype.at()

Un nuevo método en el prototipo de String, at() devuelve el carácter en el índice especificado, permitiendo índices negativos para acceder a caracteres desde el final de la cadena. Ejemplo:

const palabra = 'JavaScript';
console.log(palabra.at(-1)); // 't'

8. Causa de Error

Una nueva propiedad en los objetos de Error, cause permite especificar la causa subyacente de un error. Ejemplo:

try {
  throw new Error('Error principal', { cause: new Error('Causa del error') });
} catch (err) {
  console.error(err);
  console.error('Causa:', err.cause);
}

Este ultimo es uno de mis favoritos, ya que permite tener mas control y detalle sobre la causa del error, ayudando al usuario a entender que ha sucedido.