Vamos a repasar las principales versiones de JavaScript, con sus mejoras y modificaciones más importantes.
JavaScript ha evolucionado mucho desde su creación, sobre todo a partir de 2015. Ya no es el lenguaje de “andar por casa” que tanto se criticaba (que, se le sigue criticando, pero ahora sin tanta razón).
Con las distintas versiones se ha convertido en un lenguaje mucho formal y profesional, que mantiene sus propias características, pero incorporando nuevas funciones que lo han puesto al nivel de un lenguaje de programación moderno.
Así que aquí tenéis un listado y su fecha de lanzamiento.
JavaScript
Evolución del lenguaje desde su creación
JavaScript 1.0
Creación por Brendan Eich en Netscape
JavaScript 1.1
Primera implementación en Netscape Navigator 3
ECMAScript 1
Primer estándar ECMAScript
ECMAScript 3 ⭐
Gran actualización
ECMAScript 5
Modo estricto y JSON nativo
ECMAScript 6 (ES6/ES2015) ⭐
Actualización masiva: let, const, clases, módulos
ECMAScript 7 (ES2016)
Includes y exponenciación
ECMAScript 8 (ES2017)
async/await, Object.entries()
ECMAScript 9 (ES2018)
Rest/Spread para objetos
ECMAScript 10 (ES2019)
flat(), flatMap(), trimStart()
ECMAScript 11 (ES2020)
BigInt, nullish coalescing, Optional Chaining
ECMAScript 12 (ES2021)
Promise.any(), operadores lógicos asignados
ECMAScript 13 (ES2022)
Top-level await, RegExp Match Indices
ECMAScript 14 (ES2023)
Mejoras en arrays y WeakRefs
Y aquí un resumen de las características principales que incorpora cada versión 👇.
Características por versión
ECMAScript 1 (ES1) - 1997
- Primera versión oficial del estándar, estableciendo una base sólida para el lenguaje.
- Se definieron las funciones básicas, estructuras de control (
if
,while
,for
), operadores y objetos nativos (Array
,String
,Date
).
ECMAScript 2 (ES2) - 1998
- Actualización menor que estandarizó especificaciones técnicas para alinear el estándar con ISO/IEC 16262.
- Sin cambios funcionales importantes en el lenguaje.
ECMAScript 3 (ES3) - 1999
- Ampliación de la funcionalidad del lenguaje, incluyendo expresiones regulares, manejo de errores con
try...catch
, y mejoras en el manejo de cadenas de texto. - Adición de
Object
,Array
y métodos para la manipulación avanzada de datos. - Sentó las bases para JavaScript en aplicaciones complejas en la web.
ECMAScript 4 (ES4) - Cancelado
- Se propusieron características avanzadas como tipado estático y clases, pero el proyecto no alcanzó consenso.
- Sin embargo, muchas ideas y propuestas de ES4 fueron la base para futuras versiones, especialmente ES6.
ECMAScript 5 (ES5) - 2009
- Introducción de
strict mode
para mejorar la seguridad y el rendimiento del código. - Métodos funcionales en
Array
(map
,forEach
,filter
,reduce
, etc.). - Nuevas funcionalidades en
Object
comoObject.create
,Object.defineProperty
yObject.keys
. - Esta versión consolidó el uso de JavaScript en aplicaciones web modernas.
ECMAScript 5.1 (ES5.1) - 2011
- Actualización menor que formalizó correcciones y estandarizó algunas implementaciones.
- Se convirtió en la base del estándar ISO/IEC 16262:2011.
ECMAScript 6 (ES6) - 2015
- Incorporación de
let
yconst
para mejorar el control de alcance de variables. - Funciones de flecha (
=>
) para una sintaxis más corta y manejable. - Clases y herencia de clases para facilitar la programación orientada a objetos.
- Módulos (
import
yexport
) que permiten una mejor organización y modularización del código. - Template literals (
` `
) para interpolación de variables y formato de strings. - Promesas (
Promise
) para manejar operaciones asincrónicas de forma estructurada.
ECMAScript 7 (ES7) - 2016
- Operador de exponenciación (
**
), que permite expresar potencias de manera concisa. - Método
Array.prototype.includes
para verificar si un elemento está presente en un array.
ECMAScript 8 (ES8) - 2017
async
/await
para simplificar el manejo de operaciones asincrónicas.- Métodos
Object.entries
yObject.values
para obtener valores o pares clave-valor de un objeto. String padding
(padStart
ypadEnd
) para manipulación de strings.Trailing commas
en parámetros de funciones para una mejor legibilidad.
ECMAScript 9 (ES9) - 2018
- Operador de reposo y propagación (
...
) para facilitar el manejo de objetos y arrays. - Iteración asíncrona con
for await...of
, útil para trabajar con flujos de datos asincrónicos. - Mejoras en el manejo de
Promise
, incluyendoPromise.finally
.
ECMAScript 10 (ES10) - 2019
- Método
Array.prototype.flat
yflatMap
para trabajar con arrays multidimensionales. - Operador de encadenamiento opcional (
?.
) para simplificar el acceso a propiedades anidadas. - Métodos
Object.fromEntries
y mejoras enString.prototype.matchAll
.
ECMAScript 11 (ES11) - 2020
- Operador de coalescencia nula (
??
), que asigna un valor solo si esnull
oundefined
. - Métodos
Promise.allSettled
para manejar múltiples promesas y ver el estado de todas. WeakRefs
yFinalizationRegistry
para la gestión avanzada de memoria.- Opción de encadenamiento opcional (
?.
), para simplificar el acceso seguro a propiedades anidadas.
ECMAScript 12 (ES12) - 2021
- Métodos
String.prototype.replaceAll
para reemplazar todas las coincidencias en un string. - Operadores lógicos de asignación (
&&=
,||=
,??=
) para simplificar las asignaciones condicionales. - Mejoras en la manipulación de clases y la definición de campos privados (
#
).
ECMAScript 13 (ES13) - 2022
- Top-level await, permitiendo el uso de
await
en módulos sin necesidad de envolver en funciones asincrónicas. - Mejora en el uso de iteradores y generadores.
- Soporte para operadores de comparación más seguros y controlados.
ECMAScript 14 (ES14) - 2023
- Mejora en
Array.prototype.with
, que permite insertar elementos en arrays sin mutarlos. Symbol.asyncIterator
para optimizar los generadores asincrónicos.- Optimización de los operadores lógicos para facilitar la escritura de lógica condicional.