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
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"
La 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.