ECMASCRIPT es la especificación donde se mencionan todos los detalles relacionados cómo debe funcionar y comportarse javascript en un navegador. De esta forma, los diferentes navegadores (Chrome, Firefox, Opera, Edge, Safari, etc…) saben como deben desarrollar los motores de javascript para que cualquier código o programa funcione exactamente igual, independientemente del navegador que se utilice.

Teniendo esto en cuenta, debemos saber que los navegadores web intentan cumplir la especificación ECMAScript al máximo nivel, pero no todos ellos lo consiguen. Por lo tanto, pueden existir ciertas discrepancias. Por ejemplo, pueden existir navegadores que cumplan la especificación por ejemplo ECMAScript 6 al 70% y otros que sólo cumplan al 50%. Esto significa que pueden haber características que no funcionen en un navegador específico y en otros sí.

Por ende es importante considerar mantener los navegadores actualizados, todo va cambiando y los navegadores se ven obligados a lanzar nuevas versiones para brindar mayor compatibilidad con ECMAScript* más moderno.

Versiones de ECMAScript

A lo largo de los años, javascript ha ido sufriendo modificaciones que los navegadores han ido implementando para acomodarse a la última versión de ECMASCript cuanto antes. La lista de versiones de ECMASCript aparecidas hasta el momento son las siguientes, donde encontraremos las versiones enmarcadas en lo que podemos considerar el pasado de javascript:

Edición Fecha Nombre formal>informal Cambios significativos
1 JUN/1997 (ES1) ECMAScript 1997 (ES1) Primera edición
2 JUN/1998 ECMAScript 1998 (ES2) Cambios leves
3 DIC/1999 ECMAScript 1999 (ES3) RegExp, try/catch, etc...
4 AGO/2008 ECMAScript 2008 (ES4) Versión abandonada
5 DIC/2009 ECMAScript 2009 (ES5) Strict mode, JSON, etc...
5.1 DIC/2011 ECMAScript 2011 (ES5.1) Cambios leves

A partir del año 2015, se marcó un antes y un después en el mundo de javascript, estableciendo una serie de cambios que lo tranformarían en un lenguaje moderno, partiendo desde la especificación de dicho año, hasta la actualidad:

Edición Fecha Nombre formal>informal Cambios significativos
6 JUN/2015 ES2015 Clases, módulos, hashmaps, sets, for of, proxies...
7 JUN/2016 ES2016 Clases, módulos, hashmaps, sets, for of, proxies...
8 JUN/2017 ES2017 Async/Await
9 JUN/2018 ES2018 Rest/Spread operator, Promise.finally()...
10 JUN/2019 ES2019 flat, flatMap, trimStart(), optional error catch...
11 JUN/2020 ES2020 Dynamicc imports, BigInt, Promise.allSettled

En ocasiones, algunos navegadores deciden adelantarse en implementar pequeñas funcionalidades de versiones posteriores de ECMAScript antes que otras, para ir testeando y probando características, por lo que no es raro que algunas características de futuras especificaciones puedan estar implementadas en algunos navegadores.

Una buena forma de conocer en que estado se encuentra un navegador concreto en su especificación de ECMAScript es consultando la tabla de compatibilidad Kangax.

Estrategia <<crossbrowser>>

Dicho esto, teniendo en cuenta todos estos detalles, es muy habitual que el programador estpe confuso en como empezar a programar y que versión ECMASCript adoptar como preferencia.

Generalmente, el programador suele tomar una de las siguientes estrategias <<crossbrowser>> para asegurarse que el código funcionará en todos los navegadores:

Enfoque Código escrito Descripción
Conservador ECMAScript 5 Incómodo de escribir. Anticuado. Compatible con navegadores nativamente.
Delegador Depende Cómodo. Rápido. Genera dependencia al framework/librería.
Evergreen Ecmascript 6+ Cómodo. Moderno. No garantiza la compatibilidad en navegadores antiguos.
Transpilador ECMAScript 6+ Cómodo. Moderno. Preparado para el futuro. Requiere preprocesado.

Un simple programador. Apasionado por las nuevas tecnologías, amante de la teoría de conjuntos.
← Anterior Siguiente →