ECMAScript 2021

Cristian Poley
3 min readJan 23, 2021

--

1. Promise.any

Posiblemente hayas utilizado Promise.all, esta utilidad nos devuelve una promesa que termina cuando acaba correctamente la lista de promesas pasadas como parámetro.

En esta nueva funcionalidad, se resuelve la promesa cuando termina una de las promesas enviadas en la lista:

Promise.any([
fetch(endpointOne).then(()=>{return '1'})
fetch(endpointTwo).then(()=>{return '2'})
fetch(endpointThree).then(()=>{return '3'})
])
.then((res)=> {})// Se lanza el then cuando cualquiera se resuelve
.catch((err) => console.log({error}))

2. replaceAll

Estoy 100% seguro que alguna vez has necesitado eliminar o reemplazar un string que se encuentra más de una vez en una cadena de texto y para ello has usado una RegExp.
¡Por fin tenemos una solución más limpia!. Ya no hace falta buscar en Google cómo crear una RegExp, ahora puedes hacerlo con replaceAll.

const string = 'Esto es un ejemplo de párrafo\ncon un par de\nsaltos de linea'
string.replaceAll('\n', ' ')
// Esto es un ejemplo de párrafo con un par de saltos de linea

3. Propiedades y métodos privados en Clases

Por defecto, las propiedades y métodos de una Clase son públicas y se pueden modificar fuera de la misma. Sin embargo, con esta nueva funcionalidad podemos hacer definiciones privadas utilizando el prefijo #.

Esto es interesante ya que añade una nueva funcionalidad impuesta por el lenguaje y evitamos trabajar con declaraciones que pueden ser diferentes entre equipos (se solía indicar que una propiedad o método era privado añadiéndole el prefijo _). Si se intenta invocar desde fuera de la clase obtenemos un Error.

class MyClass {
#privateYear
constructor() {
this.#privateYear = 2021
}

static #moreInterestFrameworkMethod() {
return 'Svelte'
}
}

4. Temporal

¿Utilizabas moment.js y ahora estás migrando a Luxon? Pues te aviso que quizás ya no te haga falta porque en la nueva versión de ECMA va a salir Temporal.

Viene a sustituir a nuestro gran compañero Date(), centrándose en:

  • Proporcionar API fáciles de usar para cálculos de fecha y hora.
  • Soporte para todas las zonas horarias.
  • Tratar solo con objetos inmutables.
  • Soporte de calendarios no gregorianos.

Te animo a que le eches un vistazo a su extensa API, desde luego será muy bien recibido por la comunidad.

5. Nuevos tipos de datos: Records y Tuples

La guinda del pastel 🍒.

  • Records (objeto inmutable).
  • Tuples (array inmutable).

Sintaxis

La sintaxis es exactamente igual que la actual pero concatenándole por delante # y siguen teniendo las mismas funcionalidades: destructuring, spread operator, etc.

const javascript = #{
year: 2021,
framework: 'Svelte'
}
const frameworks = #['Vue', 'React, 'Svelte', 'Angular']

¿Y qué cambia esa almohadilla? El cambio importante es la Inmutabilidad.

Inmutabilidad

Estos nuevos tipos de datos son inmutables desde que se declaran, por lo tanto librerías como InmutableJS o el método Object.freeze() van a quedar en desuso.

javascript.year = 2022 // Error

Estos tipos de datos pueden anidarse entre Records/Tuples y aplican los mismos principios de inmutabilidad.

const javascript = #{
year: 2021,
frameworks: #['Vue', 'React, 'Svelte', 'Angular']
}

Igualdad

Con estos nuevos tipos podremos por fin comprobar la igualdad de “objetos” y “arrays” por su valor y no por la referencia.

const javascript = { year: 2021 }
const javascript2 = { year: 2021 }
javascript === javascript2 // false
JSON.stringify(javascript) === JSON.stringify(javascript2) //true
Si lo pasamos a Records:const javascript = #{ year: 2021 }
const javascript2 = #{ year: 2021 }
javascript === javascript2 // true

¡Espero que te haya gustado! Estoy seguro que veremos muchas de estas funcionalidades este 2021, ¿cuál es tu favorita?, sin duda la mía es Temporal.

--

--