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 (?<=#)fo
expresió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
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.