¿Cuál es la diferencia entre JavaScript y ECMAScript?

Intenté buscar en Google "la diferencia entre JavaScript y ECMAScript".

Terminé teniendo que atravesar un mar de resultados ambiguos y aparentemente contradictorios:

"ECMAScript es un estándar".

"JavaScript es un estándar".

"ECMAScript es una especificación".

"JavaScript es una implementación del estándar ECMAScript".

"ECMAScript es JavaScript estandarizado".

"ECMAScript es un idioma".

"JavaScript es un dialecto de ECMAScript".

"ECMAScript es JavaScript".

Conteniendo las ganas de llorar, me animé y decidí comprometerme con una investigación dolorosa pero productiva.

Este artículo representa mi comprensión actual de las diferencias entre JavaScript y ECMAScript. Está dirigido a personas que están familiarizadas con JavaScript pero que desean una comprensión más clara de su relación con ECMAScript, navegadores web, Babel y más. También aprenderá sobre lenguajes de secuencias de comandos, motores de JavaScript y tiempos de ejecución de JavaScript por si acaso.

Así que anímate.

Un glosario de JavaScript / ECMAScript

A continuación se muestra una lista de definiciones, diseñadas con un enfoque en la coherencia y la claridad. Las definiciones no están completas al 100%. Están construidos de una manera que proporciona una comprensión de alto nivel de la conexión y la relación entre JavaScript y ECMAScript.

Sin más preámbulos, comencemos.

Ecma Internacional

Una organización que crea estándares para tecnologías.

Para ilustrar un ejemplo de "estándar" (aunque no uno creado por Ecma), piense en todos los teclados que haya utilizado. ¿La gran mayoría tenía letras en el mismo orden y una barra espaciadora, una tecla Intro, teclas de flecha, con números en una fila en la parte superior? Esto se debe a que la mayoría de los fabricantes de teclados basan su diseño de teclado en el estándar de diseño QWERTY.

ECMA-262

Este es un estándar publicado por Ecma International. Contiene la especificación de un lenguaje de secuencias de comandos de propósito general.

ECMA-262 es un estándar como QWERTY, pero en lugar de representar una especificación de distribución de teclado, representa una especificación de lenguaje de secuencias de comandos llamada ECMAScript.

Piense en ECMA-262 como el número de referencia de ECMAScript.

Un lenguaje de programación

Un lenguaje de programación diseñado específicamente para actuar en una entidad o sistema existente.

Para tener una idea general de lo que hace que un lenguaje de programación sea un lenguaje de secuencias de comandos, considere los comandos "caminar", "correr" y "saltar". Estas acciones requieren algo para llevarlas a cabo, tal vez una persona, un perro o un personaje de un videojuego. Sin un actor que ejecute estos comandos, "caminar", "correr" y "saltar" no tendría sentido. Este conjunto de acciones es análogo a un lenguaje de programación que se centra en manipular una entidad externa.

ECMAScript

La especificación definida en ECMA-262 para crear un lenguaje de secuencias de comandos de propósito general.

Sinónimo: especificación ECMAScript

Aunque ECMA-262 es el nombre del estándar, representa la especificación del lenguaje de secuencias de comandos ECMAScript.

ECMAScript proporciona las reglas, detalles y pautas que un lenguaje de scripting debe observar para ser considerado compatible con ECMAScript.

JavaScript

Un lenguaje de secuencias de comandos de propósito general que se ajusta a la especificación ECMAScript.

JavaScript es el lenguaje con sabor a café con el que me encanta programar. ECMAScript es la especificación en la que se basa. Al leer la especificación ECMAScript, aprenderá a crearun lenguaje de secuencias de comandos. Al leer la documentación de JavaScript, aprenderá a utilizar un lenguaje de secuencias de comandos.

Cuando la gente llama a JavaScript un "dialecto del idioma ECMAScript", lo dicen en el mismo sentido que cuando hablan de dialectos en inglés, francés o chino. Un dialecto deriva la mayor parte de su léxico y sintaxis de su lengua madre, pero se desvía lo suficiente como para merecer una distinción.

JavaScript implementa principalmente la especificación ECMAScript como se describe en ECMA-262, pero existen algunas diferencias. Mozilla describe aquí las características del lenguaje no ECMAScript de JavaScript:

Un motor de JavaScript

Un programa o intérprete que comprende y ejecuta código JavaScript.

Sinónimos : intérprete de JavaScript, implementación de JavaScript

Los motores de JavaScript se encuentran comúnmente en los navegadores web, incluidos V8 en Chrome, SpiderMonkey en Firefox y Chakra en Edge. Cada motor es como un módulo de idioma para su aplicación, lo que le permite admitir un determinado subconjunto del lenguaje JavaScript.

Un motor de JavaScript para un navegador es como la comprensión de un idioma para una persona.Si volvemos a visitar nuestro ejemplo de las acciones "caminar", "correr", "saltar", un motor de JavaScript es la parte de una "entidad" que realmente entiende lo que significan estas acciones.

Esta analogía ayuda a explicar algunas cosas sobre los navegadores:

Diferencias en el rendimiento del navegador

Dos personas pueden reconocer el comando "saltar", pero una puede reaccionar al comando más rápido porque la persona puede entender y procesar el comando más rápido que la otra persona. De manera similar, dos navegadores pueden comprender el código JavaScript, pero uno lo ejecuta más rápido porque su motor JavaScript se implementa de manera más eficiente.

Diferencias en la compatibilidad del navegador

Considere las diferencias que existen entre personas que hablan el mismo idioma. Incluso si muchas personas hablan inglés, algunas pueden conocer algunas palabras, expresiones y reglas de sintaxis que otras no conocen, y viceversa. Los navegadores son de la misma manera. Aunque todos los motores JavaScript de los navegadores entienden JavaScript, algunos navegadores tienen una mayor comprensión del lenguaje que otros. Existen diferencias en la forma en que los navegadores admiten el idioma.

Con respecto al soporte del navegador, la gente suele hablar de “compatibilidad con ECMAScript” en lugar de “compatibilidad con JavaScript”, aunque los motores JavaScript analizan y ejecutan… bueno, JavaScript. Esto puede resultar un poco confuso, pero hay una explicación.

Si recuerda, ECMAScript es una especificación de cómo podría verse un lenguaje de secuencias de comandos . El lanzamiento de una nueva edición de ECMAScript no significa que todos los motores JavaScript existentes tengan repentinamente esas nuevas características. Depende de los grupos u organizaciones responsables de los motores JavaScript estar al día sobre la última especificación de ECMAScript y adoptar sus cambios.

Por lo tanto, los desarrolladores tienden a hacer preguntas como: "¿Qué versión de ECMAScript admite este navegador?" o "¿Qué funciones de ECMAScript admite este navegador?" Quieren saber si Google, Mozilla y Microsoft han logrado actualizar los motores JavaScript de sus navegadores, por ejemplo, V8, SpiderMonkey y Chakra, respectivamente, con las características descritas en el último ECMAScript.

La tabla de compatibilidad de ECMAScript es un buen recurso para responder esas preguntas.

Si sale una nueva edición de ECMAScript, los motores de JavaScript no integran toda la actualización de una vez. Incorporan las nuevas funciones de ECMAScript de forma incremental, como se ve en este extracto del registro de cambios de JavaScript de Firefox:

Un tiempo de ejecución de JavaScript

El entorno en el que se ejecuta el código JavaScript y es interpretado por un motor JavaScript. El tiempo de ejecución proporciona los objetos host en los que JavaScript puede operar y trabajar.

Sinónimos : entorno anfitrión

El tiempo de ejecución de JavaScript es la “entidad o sistema existente” mencionado en la definición del lenguaje de secuencias de comandos. El código pasa por el motor de JavaScript y, una vez analizado y comprendido, una entidad o sistema realiza las acciones interpretadas. Un perrocamina, una personacorre, un personaje de un videojuego salta (o en el caso de la imagen anterior, se hunde).

Las aplicaciones están disponibles para las secuencias de comandos de JavaScript proporcionando "objetos de host" en tiempo de ejecución. Para el lado del cliente, el tiempo de ejecución de JavaScript sería el navegador web, donde los objetos de host como ventanas y documentos HTML están disponibles para su manipulación.

¿Ha trabajado alguna vez con la ventana o los objetos de host de documentos? Los objetos de ventana y documento no forman parte del lenguaje JavaScript central. Son API web, objetos proporcionados por un navegador que actúa como entorno de host de JavaScript. Para el lado del servidor, el tiempo de ejecución de JavaScript es Node.js. Los objetos de host relacionados con el servidor, como el sistema de archivos, los procesos y las solicitudes, se proporcionan en Node.js.

Un punto interesante: diferentes tiempos de ejecución de JavaScript pueden compartir el mismo motor de JavaScript. V8, por ejemplo, es el motor de JavaScript que se usa tanto en Google Chrome como en Node.js, dos entornos muy diferentes.

ECMAScript 6

Es la sexta edición del estándar ECMA-262 y presenta cambios y mejoras importantes en la especificación ECMAScript.

Sinónimos : ES6, ES2015 y ECMAScript 2015

Esta edición de ECMAScript cambió su nombre de ES6 a ES2015 porque en 2015 Ecma International decidió cambiar a las versiones anuales de ECMAScript. En consecuencia, Ecma International también comenzó a nombrar nuevas ediciones de la especificación ECMAScript en función del año en que se publicaron. En resumen, ES6 y ES2015 son dos nombres diferentes para lo mismo.

Babel

Un transpilador que puede convertir código ES6 en código ES5.

Los desarrolladores pueden usar las nuevas y brillantes características que vienen con ES6, pero pueden estar preocupados por la compatibilidad entre navegadores para sus aplicaciones web. En el momento de redactar este artículo, Edge e Internet Explorer no son totalmente compatibles con las funciones de la especificación ES6.

Los desarrolladores preocupados pueden usar Babel para convertir su código ES6 a una versión funcionalmente equivalente que solo usa características de ES5. Todos los navegadores principales son totalmente compatibles con ES5, por lo que pueden ejecutar el código sin problemas.

Un dato más interesante

Espero que haya encontrado útil esta información sobre JavaScript y ECMAScript. Antes de concluir las cosas aquí, me gustaría compartir una información más que debe aclararse para los desarrolladores web principiantes como yo.

Pollo o huevo

Un poco de historia confusa es que JavaScript fue creado en 1996. Luego fue enviado a Ecma International en 1997 para su estandarización, lo que resultó en ECMAScript. Al mismo tiempo, debido a que JavaScript se ajusta a la especificación ECMAScript, JavaScript es un ejemplo de implementación de ECMAScript.

Eso nos deja con este hecho divertido: ECMAScript se basa en JavaScript y JavaScript se basa en ECMAScript.

Lo sé.

Suena exactamente como el tropo del viaje en el tiempo de las personas que son sus propios padres: un poco extraño, pero divertido de pensar.

Todas las cosas buenas

Sé que todos nos hemos divertido aquí, pero fue mucha información para digerir. Aprovecharé esta oportunidad para despedirme.

No dude en dejar cualquier pregunta, comentario, sugerencia o inquietud a continuación.

¡Muchas gracias por leer!