JavaScript, ES6, ES7, ES10 ¿dónde estamos?
On enero 26, 2022 by adminES6 y ES7 – recordatorio
No voy a insultaros, y escribir otra introducción de ES6…Pero en realidad, voy a hacerlo. En pocas palabras, ES6 (o ES2015) es el lote de características que pasó la etapa 4 según el hito de 2015. En otras palabras, si tienes un buen conocimiento de ES6 y algo de conocimiento de ES7, tienes unos 4 años para ponerte al día…Sin presión.
Vamos a echar un vistazo a lo que es oficialmente parte de ES6. Por cierto, todas esas características están oficialmente soportadas en todos los navegadores. En otras palabras, no necesitas Babel para usar ninguna de ellas (a no ser que soportes IE 11, al que le faltan algunas).
En ES6 tenemos:
La capacidad de crear y heredar clases.
class MyComponent extends React.Components {}
Módulos ES6 con import y export.
import * from 'React';export default MyComponent;
Generadores
let fibonacci = {
*() {
let pre = 0, cur = 1
for (;;) {
=
yield cur
}
}
}
¿Te has dado cuenta? Los decoradores, la desestructuración de objetos (como los props de React: {…props}) y demás no forman parte de ES6!
Acerca de ES7 (ES2016) esto es lo que tenemos. Es una actualización bastante pequeña:
- El operador de exponenciación
base ** exponent
- Array incluye
array.includes(myItem) // true or false
Fuente: http://ecma-international.org/ecma-262/7.0/
Como habrás notado, no, Async/Await no es parte de ES7, ¡sino de ES8!
ES8, ES9, ES10
A todos los que han tenido una entrevista relacionada con JavaScript en los últimos 2 años, les han preguntado al menos 1671 veces qué es ES6, y qué característica trae. Pero, ¿alguien se ha dado cuenta de que, obviamente, JS no se ha detenido de repente en ES6 ni en ES7 y, sin embargo, nadie le pregunta por ello? Esta es tu oportunidad para hacer las cosas bien!
En ES8 (ES2017), aquí están las características disponibles:
Y por supuesto, las funciones Async / Await:
Si has seguido el artículo, a estas alturas deberías entenderlo: Salvo pequeñas excepciones, al ser esas funciones de la fase 4, eres capaz de usarlas en el navegador sin Babel (dicho esto, ES8 al ser ES2017, aún es bastante reciente y algunas implementaciones como Edge y el motor nativo de Opera van un poco por detrás).
¡Por último, pasar a ES10 (o ES2019)!
const array = ;array.sort(...)/*
*/
- Hacer de JavaScript un superconjunto de JSON (ver detalles aquí)
¿Qué pasa con ES5?
Si ES6 es ES2015, y ES7 es ES2016, ¿puedes adivinar cuál es el año de ES5?
…¡Has perdido! (A no ser que lo sepas de verdad, pero como no te oigo, asumo que has perdido). ES5 es ES2009!
¡No termina aquí, antes de ES5, la última actualización de ES fue en 1999!
Como puedes ver, del 97 al 99, las actualizaciones eran bastante frecuentes, luego ES5 iba a ser la única actualización en 16 años!
¿Cómo se explica eso? Bueno, en mi opinión, hay dos factores para esto. El primero es técnico: JavaScript es una mierda. Sinceramente, lo es. Por aquel entonces, teníamos unas cuantas alternativas a JS: Applets de Java, ActiveX, e incluso Flash.
Hasta 2011-aproximadamente (cuando Chrome empezó a ser una bala) no sólo esas tecnologías eran un orden de magnitud más rápidas que JS, sino que además ya tenían la mayoría de las características que hoy en día seguimos luchando por conseguir en JS. (Java tiene todas las características del lenguaje como clases y decoradores, soporte de multi-threading, OpenGL, Sockets, etc…). Cuando Chrome y Google entraron en escena y anunciaron en 2013 que Java estaba fuera (y luego le siguió Flash), la cruzada para que JS se pusiera a la altura de sus competidores estaba en marcha. Dos años después, teníamos ES6 a las puertas.
El segundo factor es económico: el 2000 es el año del estallido de la burbuja Dot-com. Para los más jóvenes, imaginad lo que ha sido el bitcoin hace unos años, las startups de Internet estaban igual a finales de los 90. Las startups añadían el .com al final de sus nombres para conseguir enormes inversiones de riesgo (igual que hoy en día tenemos una promesa de mySuperStartup.ai) hasta que el valor cayó repentinamente en los años 20. Esta es una explicación muy rudimentaria, y te invito a echar un vistazo al artículo de la wikipedia para una mejor.
La cuestión es que Internet dejó de ganar la tracción que necesitaba para que JS y las tecnologías relacionadas con la web fueran un foco de atención. Más tarde, con el auge de Amazon, Facebook y Google, la web tuvo una nueva razón de ser, y una nueva razón para prosperar. Era lógico que retomáramos JS. Google se hizo público en 2004, Chrome se lanzó en 2008, y se convirtió en el navegador más popular en 2014: un año antes de que llegara ES6.
¿Qué falta? (Propuestas rechazadas)
Object.observe
Este es probablemente el mayor rechazo de todos. Inicialmente permitía a JS observar cualquier valor en el código :
var obj = {
foo: 0,
bar: 1
};
Object.observe(obj, function(changes) {
console.log(changes);
});obj.baz = 2;
//
Esta era una gran característica, y obviamente, puedes hacerlo desde tu código (o con un polyfill) pero implementarlo en el navegador era la promesa de un código reactivo más rápido (ej: Angular usa mucho observing). Se retiró porque no pudieron llegar a una implementación con rendimiento constante. Más detalles aquí.
Promesas cancelables
Se explica por sí sola, una característica, estoy seguro, que no es la única que falta. La idea es permitir a los desarrolladores cancelar la ejecución de cualquier promesa en cualquier momento.
Los casos de uso varían, por ejemplo, para tener el tiempo de espera del lado del cliente en una operación asíncrona, o por ejemplo, si tienes un sistema de navegación basado en pestañas, y el usuario hace clic en una pestaña antes de que hayas tenido tiempo de cargar el contenido de la pestaña actual.
blöcks
Sólo menciono esto porque me gusta el nombre, pero también porque es una característica agradable comparable a las rutinas de Go o las tareas de C#.
const blöck = await {|
// This code is Async, but most importantly, executed in another thread
|};
Otros
Se han hecho algunas otras propuestas interesantes, como los constructores invocables. La mayoría de ellas han sido retiradas porque el autor original lo hizo, o rechazadas porque entran en conflicto o se solapan con características existentes/planeadas.
Deja una respuesta