Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

JavaScript, ECMAScript, ES6, ¿Existe ES7?... Aclarando las diferentes versiones del lenguaje

JavaScript es considerado por algunos el lenguaje más incomprendido del mundo. Y lo cierto es que su nombre y sus versiones no contribuyen tampoco a que no sea así.

En primer lugar el hecho de llevar la palabra "Java" como parte de su nombre crea confusión y lleva a pensar a algunos que tiene algo que ver con el lenguaje de programación Java, creado por Sun Microsystems en el año 1991. No es así en absoluto y fue una decisión de marketing de sus creadores hace ya más de 20 años.

Pero es que además está ECMAScript. A veces, al hablar de JavaScript se habla de ECMAScript. ¿Qué tiene que ver uno con el otro? ¿Son lo mismo? ¿Qué versiones hay? ¿Existen todas de las que se habla a veces?

ECMAScript

ECMAScript-2017

ECMA es el nombre de la asociación europea de fabricantes de computadoras (European Computer Manufacturer Association). Se trata de una organización sin ánimo de lucro que se encarga, entre otras cosas, de regular el funcionamiento de muchos estándares de la industria mundial, no solo de Europa. Entre estos estándares se encuentran los de algunos lenguajes de programación, como por ejemplo C# (que es el estándar ECMA-334), las extensiones del lenguaje C++/CLI, el lenguaje de descripción de servicios Web (WSDL) o, por supuesto, nuestro queridísimo ECMAScript que es el estándar ECMA-262.

JavaScript es una de las implementaciones del estándar ECMA-262, en concreto la que se usa en los navegadores. Pero existen otras implementaciones con sus propias extensiones, como por ejemplo ActionScript, el lenguaje que se usaba para programar Flash  que se lanzó también en 1997.

Por eso, cuando en la web se habla de ECMAScript y JavaScript en realidad se está hablando de la misma cosa. El primero es el estándar que define cómo debe funcionar el lenguaje, y el segundo es una implementación concreta de lo que indica la especificación estándar.

ECMAScript 1, apareció en Junio de 1997, hace casi 20 años, y trataba de estandarizar el lenguaje de modo que los fabricantes de navegadores no se dedicasen a modificarlo a su antojo, creando versiones incompatibles.

Un año después, en junio de 1998, apareció ECMAScript 2 que realmente no incluía nada nuevo sino que era un cambio de formato en la especificación para alinearla con los estándares ISO.

En diciembre de 1999, justo antes del cambio de siglo, se lanzó ECMAScript 3, que añadió soporte para expresiones regulares, gestión estructurada de excepciones y algunas otras mejoras de menor calado, pero que convertían al lenguaje en algo más serio.

ECMAScript 4 jamás llegó a ver la luz. El motivo fueron las luchas internas sobre la complejidad del lenguaje. Se querían añadir demasiadas cosas que hacían que el lenguaje perdiera parte de su propósito inicial. Muchas de las propuestas desaparecieron para siempre, y otras vieron la luz en la siguiente versión o incluso se pospusieron hasta las versiones más recientes. Sea como fuere, esta versión 4 jamás llegó a presentarse.

Así que no fue hasta diciembre de 2009, una década desde la versión anterior, que no apareció la siguiente versión del lenguaje: ECMAScript 5. Esta edición añadió el modo estricto del lenguaje, mejoró la especificación aclarando cosas que estaban demasiado abiertas en la versión 3 y que causaban confusión e implementaciones incoherentes, añadió el soporte nativo para JSON o los getters y setters para propiedades, entre otras pequeñas cosas. A esta versión se le conoce también como Harmony, que es el nombre en clave que se le daba mientras estaba en desarrollo.

Lo gracioso es que la versión 5 de ECMAScript es en realidad la 4ª versión real del lenguaje, y en realidad debería llamarse ECMAScript 4. Esto contribuye a añadir confusión.

En Junio de 2011 salió una revisión, ECMAScript 5.1, que simplemente alineaba el estándar de ECMA con el formato correspondiente de ISO: ISO/IEC 16262:2011.

En junio del año pasado se lanzó la esperadísima ECMAScript 6, cuyo nombre oficial es en realidad ECMAScript 2015. En su momento nos hicimos eco del lanzamiento y de sus novedades. Añade muchas cosas nuevas al lenguaje, algunas de las cuales se planeaban para la fallida versión 4, y otras son nuevas. Lleva el lenguaje a un nivel superior, con muchas mejoras en cuanto a sintaxis, pero también conceptos nuevos como los símbolos o las lambdas, o tipos de datos que no existían, estructuras mejoradas para iteración, etc, etc...

Finalmente, hace unos días en junio de 2016, apareció ECMAScript 7, cuyo nombre oficial es ECMAScript 2016. En realidad lo que añade es mínimo: básicamente el operador de exponenciación y un método nuevo para las matrices que permite comprobar si existen ciertos elementos dentro de éstas.

El problema con el nombre "ECMAScript 7" o "ES7"

ECMAScriptLa actual versión de ECMAScript es la número 7 (aunque sea la 6ª que sale realmente). El problema es que cuando en la Web buscas información sobre ES7 o ECMAScript 7 realmente de lo que están hablando no es de esta versión.

Se suponía que para esta última versión que acaba de salir se iban a incluir muchas nuevas funcionalidades en el lenguaje. Sin embargo no dio tiempo material y se ha lanzado una actualización muy descafeinada, con solo un par de cositas. La verdadera versión "grande" con enormes cambios fue la del año pasado, ES6 o ES2015. La más reciente, ES2016, es una actualización muy floja.

Así que cuando en Internet leas algo sobre ES7 en realidad están hablando de algo que no existe todavía y que de momento no se sabe cuándo va a estar disponible. Es posible que muchas de las nuevas características estén ya en ECMAScript 2017 (que sería realmente ES8), pero puede que tarden mucho más y sea finalmente en 2019 o 2020 cuando veamos algunas de ellas. Así que mucho cuidado con lo que te digan sobre ES7: probablemente no estén hablando de lo que tú crees.

ECMAScript en los navegadores

Además cada navegador tiene su propia implementación de ECMAScript, es decir, su propio motor de JavaScript. Como todos se han creado siguiendo lo que indica ECMA, en principio son 100% compatibles, pero podemos encontrar pequeñas diferencias entre implementaciones, en especial en aquellas partes del estándar que no dejan 100% claro cómo se debe actuar. Del mismo modo, diferentes implementaciones del motor del lenguaje pueden estar más o menos optimizadas.

Estos son los principales motores de JavaScript en los navegadores y qué versión de ECMAScript implementan a día de hoy (julio de 2016):

Navegador Motor/Implementación Versión de ECMAScript
Google Chrome V8 6
Firefox SpiderMonkey 5.1 con muchas cosas de  6 y 7
Edge Chakra 5.1 con muchas cosas de  6 y 7
Safari JavaScriptCore - Webkit 5.1 con muchas cosas de  6 y 7
Internet Explorer Jscript 9.0 5.1

 

He incluido enlaces a las versiones Open Source de los motores (excepto el de IE, que no es de código abierto). Por cierto, V8 es el motor que está debajo también de NodeJS.

Como vemos, cada motor implementa el estándar de manera diferente y en el caso concreto de ECMAScript 6 y 7, no todos implementan todo ni de la misma manera. Dado que todos excepto IE son navegadores "Evergreen", es decir, que se actualizan solos de manera automática, a menudo salen nuevas pequeñas actualizaciones que van añadiendo cada vez más soporte para las últimas versiones de ECMAScript. De hecho se puede afirmar que todos los navegadores modernos soportan ECMAScript 6 casi por completo, y en breve también ES7.

En resumen

El lío existente entre ECMAScript y JavaScript, sus números de versión que no coinciden con su nombre oficial, la versión que nunca vio la luz, las expectativas que había para ciertas versiones y que no llegaron a plasmarse, los diferentes grados de implementación que tienen los navegadores... Todo esto hace que saber de qué estamos hablando cuando hablamos de este lenguaje sea un poco confuso.

Para resumir lo más importante (aunque deberías leer todo lo anterior):

  • ECMAScript y JavaScript, a efectos prácticos son lo mismo
  • La versión tradicional de JavaScript soportada por todos los navegadores, incluso los de hace 10 0 15 años, es ECMAScript 5.
  • El gran cambio en el lenguaje se produjo el año pasado con ECMAScript 2016 (que alguna gente llama ES6 aunque no es su nombre oficial). En el último año la mayor parte de los navegadores han incorporado soporte para las novedades de esa versión.
  • Cuando en Internet leas sobre ECMAScript 7 o ES7 en realidad están hablando de una versión que no es la versión 7 del estándar aparecido en junio de este año 2016. Están hablando de una versión futura que no se sabe cuándo va a salir, así que no te dejes confundir.

Espero que este artículo te ayude a aclarar las dudas que puederas tener y toda la confusión que existe alrededor del lenguaje.

José M. Alarcón Aguín Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José M. Alarcón Aguín

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (11) -

Gustavo Lara
Gustavo Lara

Gracias por la info!

Responder

muchas gracias por la info...

Responder

Esta excelente esto :D ¡El futuro es hoy viejo!

Responder

Un estupendo y conciso artículo. Estoy empezando con Angular 4 y TypeScript y me ha aclarado todas las dudas acerca de las versiones javascript.
Muchas gracias.

Responder

Muy ilustrativo. Gracias.

Responder

Pablo Marchena
Pablo Marchena

Gran artículo en español, aunque me confundió un poco el resumen cuando vuelve a nombrar ES2016+ al cual se le llama en realidad ES7 y no ES6. Con respecto a la implementación del standard ES7 se habla como si fuera algo lejano pero ya esto esta pasando por medio de loaders de babel, podemos usar las funciones async y await, asi como los observables muy utilizados  y por mencionar también spread properties.

Responder

José Manuel Alarcón
José Manuel Alarcón

Hola Pablo:

Este artículo es de hace 2 años exactamente (julio de 2016) y no estaba claro todavía qué características saldrían en la siguiente version ECMAScript 2017, ya que acababa de salir ECMAScript 2016).

El objeto de Babel y compañía es, precisamente, poder usar características futuras o actuales de ES en navegadores que no dispongan todavía de ellas, ya que lo que hacen es "compilar" a ES5. Es decir, por supuesto que se pueden usar esos transpiladores para usar estas características, pero lo ideal sería poder usarlas nativamente en el navegador.

El objeto del artículo era aclarar que la terminología que se usaba habitualmente en el moment de escribirlo no era la más adecuada y causaba confusión, cosa que creo que sí se consigue.

Saludos

Responder

José Manuel Alarcón
José Manuel Alarcón

Por cierto, se me olvidaba: para evitar este problema, ahora a las versiones nuevas de ECMAscript que se van liberando cada verano, se les llama con el nombre del año: ES2016, ES2017, ES2018, etc... y así no hay problema.

Responder

Alvaro Ayala | Diseño web Bogotá
Alvaro Ayala | Diseño web Bogotá

No recordaba ActionScript, jajaja, que habra pasado con ese lengujaje?? actualmente se utiliza para algun tipo de desarrollo fuera de flash?

Responder

José Manuel Alarcón
José Manuel Alarcón

Muerto y enterrado, junto a Flash. Solo lo usaba Adobe para Flash y para Adobe AIR (difunto también, creo).

Responder

Molt util la informacio. Moltes gracies molt agraïda.

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.