JS: Versiones

Aunque JavaScript fue creado en 1995 por Brendan Eich, su primera versión estandarizada llegó en 1997 bajo el nombre de ECMAScript. Desde entonces, el lenguaje ha evolucionado de forma constante, con hitos clave que lo han convertido en una de las tecnologías más potentes y utilizadas en la actualidad.

Las primeras versiones

La primera versión fue la que ideó Brendan, conocida como JavaScript 1.0, integrada en el navegador web Netscape Navigator 2.0. Poco después apareció JavaScript 1.1 que se implementó en el navegador web Netscape Navigator 3.0. Luego, en 1996, Microsoft apostó por desarrollar un dialecto propio llamado «JScript» para su navegador web Internet Explorer 3.0.

ECMAScript 1 (ES1)

En 1997 la organización ECMA International publicó la primera estandarización de JavaScript, llamada ECMAScript 1, abreviado como ES1. Al ser la primera versión del lenguaje, se estableció como base: en ella se definieron algunas funciones básicas, estructuras de control, operadores y objetos nativos.

ECMAScript 2 (ES2)

La segunda versión (ECMAScript 2 o ES2) llegaría en 1998. Esta versión realmente no introdujo novedades de lenguaje. Su objetivo fue una revisión menor para alinear la norma ECMA-262 con el estándar internacional ISO/IEC 16262.

ECMAScript 3 (ES3)

Con ECMAScript 3 (ES3) de 1999 sí que llegaron novedades, como expresiones regulares, el manejo de excepciones con try y catch y mejoras en la gestión de cadenas de texto. Esta versión marcó la base del JavaScript inicial.

ECMAScript 4 (ES4)

La versión ECMAScript 4 (ES4) era una propuesta muy ambiciosa que nunca fue aprobada. Habría incluido clases, módulos, tipado estático, herencia avanzada… Esta versión fue cancelada por falta de consenso.

La gran revolución

JavaScript vivió dos puntos de inflexión en pocos años de diferencia. El primero fue que, coincidiendo con la versión ECMAScript 5 (ES5), se creó Node.js, convirtiendo JavaScript en un lenguaje multiplataforma y de propósito general.

Con ECMAScript 6 (ES6), se incorporó muchas funcionalidades modernas, dejando atrás muchas de sus limitaciones. En este punto, JavaScript pasó a ser un lenguaje mucho más serio y potente, que rivaliza con otros lenguajes.

ECMAScript 5 (ES5)

En 2009 se publicó la versión ECMAScript 5 (ES5). En esta versión se introdujo el «modo estricto» ("use strict"), lo que permitió mejorar la seguridad del lenguaje. También se incorporó nuevos métodos en los objetos Array y en Object, lo que facilitó la manipulación de datos y estructuras.

ECMAScript 6 (ES6 o ES2015)

En 2015 se publicó la versión ECMAScript 6 (ES6 o ES2015). En esta versión se introdujo let y const para declarar variables, las funciones flecha (=>), un manejo diferente de this, clases con una sintaxis más clara para la programación orientada a objetos, los módulos import y export, plantillas literales, nuevas estructuras de datos (como Map y Set) y el objeto Promise.

En constante evolución

Tras la llegada de ECMAScript 6 (ES6), se decidió publicar una nueva versión cada año. Por eso se añadió un número de versión alternativo: se añadió el año de publicación, pasando a ser también ECMAScript 2015 o ES2015. Sin embargo, la nomenclatura anterior no se ha perdido, se pueden usar las dos.

ECMAScript 7 (ES7 o ES2016)

En la versión ECMAScript 7 (ES7 o ES2016) se introdujo el operador matemático de exponenciación (**), con el fin de expresar potencias de forma más precisa. También se introdujo el método Array.prototype.includes, que permite determinar si una matriz incluye o no un determinado elemento.

ECMAScript 8 (ES8 o ES2017)

Con la versión ECMAScript 8 (ES8 o ES2017) se incorporó async y await, para simplificar el control de operaciones asíncronas. También se introdujo los métodos Object.entries y Object.values, herramientas para manipular cadenas de texto y mejoras en la legibilidad de los parámetros de una función.

ECMAScript 9 (ES9 o ES2018)

La versión ECMAScript 9 (ES9 o ES2018) introdujo un nuevo operador de reposo (rest) y propagación (spread) aplicado a objetos. También se trajo mejoras en las expresiones regulares, se amplió el soporte de las promesas con el método finally y se añadió la iteración asíncrona (for await...of).

ECMAScript 10 (ES10 o ES2019)

La llegada de ECMAScript 10 (ES10 o ES2019) introdujo la posibilidad de trabajar con arrays de múltiples dimensiones, que simplifican el manejo de estructuras anidadas. También añadió Object.fromEntries para convertir pares clave-valor en objetos y mejoras en String.prototype.

ECMAScript 11 (ES11 o ES2020)

En la versión ECMAScript 11 (ES11 o ES2020) se incorporó características clave como el operador de encadenamiento opcional (?.) y el operador de fusión nula (??). Se introdujo el tipo numérico BigInt para trabajar con enteros de gran tamaño, la palabra clave globalThis para acceder de forma unificada al objeto global, y mejoras en el manejo dinámico de import().

ECMAScript 12 (ES12 o ES2021)

Con la versión ECMAScript 12 (ES12 o ES2021) se añadió mejoras prácticas para el desarrollo. Destacan los métodos de String.prototype para reemplazar todas las ocurrencias de una cadena de texto, el nuevo método Promise.any y los nuevos operadores lógicos de asignación &&=, ||= y ??=. Además, se incorporó mejoras en la notación numérica con guiones bajos para separar los millares y mejorar la legibilidad; por ejemplo: 1_000_000.

ECMAScript 13 (ES13 o ES2022)

La versión ECMAScript 13 (ES13 o ES2022) marcó un gran avance en modularidad y orientación a objetos. Se introdujo top-level await, que permite usar await directamente sin requerir funciones asíncronas. También se añadió el método Object.hasOwn y se incorporaron nuevas capacidades en las clases. Además, se optimizó el manejo de arrays con métodos como at(), que permite acceder a elementos mediante índices negativos.

ECMAScript 14 (ES14 o ES2023)

La versión ECMAScript 14 (ES14 o ES2023) se centró en mejoras de arrays y colecciones. Incorporó los métodos findLast y findLastIndex para buscar elementos recorriendo el array desde el final. También se añadió los métodos toSorted, toReversed y toSpliced, que devuelven nuevas copias de arrays sin modificar el original. Otra novedad fue el soporte de shebangs (#!) en scripts de JavaScript ejecutados desde la línea de comandos.

ECMAScript 15 (ES15 o ES2024)

Con la versión ECMAScript 15 (ES15 o ES2024) se incorporó varias mejoras. Llegaron los métodos estáticos Object.groupBy y Map.groupBy para agrupar elementos de colecciones. También se introdujo funciones para resolver o rechazar una promesa, se amplió el soporte para realizar operaciones sobre conjuntos con nuevos métodos, se añadió el sufijo /v para las expresiones regulares y se incorporó Temporal para una mejor gestión de fechas y tiempo.