ES2018: Nuevas funciones de Javascript en 2018

Nuestros amigos de TC39 han lanzado nuevas actualizaciones para nuestro amado lenguaje JavaScript.

Si quieres seguir el proceso de los nuevos lanzamientos por parte del comité, puedes acceder a este enlace. El proceso de aprobación y realización de un cambio pasa por cinco etapas:

  • Etapa 0: Strawman - Permitir la entrada en la especificación
  • Etapa 1: Propuesta - Exponer los argumentos a favor de la adición; Describe la forma de una solución; Identificar desafíos potenciales
  • Etapa 2: Borrador: describa con precisión la sintaxis y la semántica utilizando un lenguaje de especificaciones formal
  • Etapa 3: Candidato: indique que un mayor refinamiento requerirá comentarios de las implementaciones y los usuarios
  • Etapa 4: Terminado: indica que la adición está lista para su inclusión en el estándar formal ECMAScript

Se pueden ver más detalles aquí. Si desea obtener más información sobre los cambios anteriores, consulte ES6, ES7 y ES8.

Entonces, veamos qué agregaron o actualizaron el año pasado:

1. Muchos cambios en Regex

Tenemos cuatro modificaciones para regex. Veámoslos:

s( dotAll) marca para expresiones regulares

Al usar expresiones regulares, espera que el punto .coincida con un solo carácter, pero no siempre es cierto. Una excepción es con los caracteres de terminación de línea:

/hello.bye/.test('hello\nbye') // prints false

La solución son las nuevas banderas (de una sola línea):

/hello.bye/s.test('hello\nbye') // prints true

RegExp grupos de captura con nombre

Esta es la forma antigua de obtener el año, mes y día de una fecha:

const REGEX = /([0-9]{4})-([0-9]{2})-([0-9]{2});const results = REGEX.exec('2018-07-12');console.log(results[1]); // prints 2018console.log(results[2]); // prints 07console.log(results[3]); // prints 12

Y si está trabajando con una expresión regular larga, sabe lo difícil que es hacer un seguimiento de los grupos, paréntesis y los índices. Con el nuevo grupo de captura con nombre, es posible:

const REGEX = /(?[0-9]{4})-(?[0-9]{2})-(?[0-9]{2});const results = REGEX.exec('2018-07-12');console.log(results.groups.year); // prints 2018console.log(results.groups.month); // prints 07console.log(results.groups.day); // prints 12

Revisión de expresiones regulares detrás de aserciones

Hay dos versiones de las afirmaciones de mirar detrás: positiva y negativa.

a) Positivo (? < =…)

'$foo #foo @foo'.replace(/(?<=#)foo/g, 'XXX')// prints $foo #XXX @foo

Esta (?<=#)foexpresión regular o / g dice que la palabra debe comenzar con # y no contribuye a la cadena coincidente general (por lo que no reemplazará el carácter #).

b) Negativo (? < !…)

'$foo #foo @foo'.replace(/(?
    

On the contrary, this assertion guarantees that it doesn't start with #.

RegExp Unicode Property Escapes

Now we can search for characters by mentioning their Unicode character property inside of \p{}

/\p{Script=Greek}/u.test('μ') // prints true

You can check out more of the properties by clicking here.

2. Rest/Spread Properties

The rest operator (...) copies the remaining property keys that were not mentioned. Let's look at an example:

const values = {a: 1, b: 2, c: 3, d: 4};const {a, ...n} = values;console.log(a); // prints 1console.log(n); // prints {b: 2, c: 3, d: 4}

3. Promise.prototype finally

This new callback will always be executed, if catch was called or not.

fetch('//website.com/files').then(data => data.json()).catch(err => console.error(err)).finally(() => console.log('processed!'))

4. Asynchronous Iteration

Finally!

Now we can use await on our loops declarations.

for await (const line of readLines(filePath)) { console.log(line);}

And these are all the changes from this year. Let’s wait to see what they will bring us next year.

If you enjoyed this article, be sure to like it give me a lot of claps — it means the world to the writer ? And follow me if you want to read more articles about Culture, Technology, and Startups.

Flávio H. de Freitas is an Entrepreneur, Engineer, Tech lover, Dreamer and Traveler. Has worked as CTO in Brazil, Silicon Valley and Europe.