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

462

¿Cuál es la diferencia entre ECMAScript y JavaScript? De lo que deduje, ECMAScript es el estándar y JavaScript es la implementación. ¿Es esto correcto?

Chico
fuente

Respuestas:

183

ECMAScript es el lenguaje, mientras que JavaScript, JScript e incluso ActionScript 3 se denominan "dialectos". Wikipedia arroja algo de luz sobre esto.

Ryan Florence
fuente
99
lo que sería realmente agradable es una clara correlación entre las versiones de JavaScript y ECMAScript, por ejemplo ES5 corresponde a JS1.5 etc. ah lo encontré: en.wikipedia.org/wiki/JavaScript#Versions
Sam Joseph
2
@Sam - actualización del enlace de Sam: en.wikipedia.org/wiki/JavaScript#Version_history
Rop
65
Votados a favor y en contra de Yang Li, ya que esta respuesta dice muy poco y básicamente te apunta a Wikipedia. La respuesta de Yang Li es mucho más detallada y útil. Además, si uno es el idioma / estándar y otro el dialecto, o la implementación, etc., está abierto a la opinión, y no a los hechos, por lo que entiendo. Mientras que esta respuesta hace parecer que es un hecho. Corrígeme si estoy equivocado. De hecho, diría que la sugerencia de esta respuesta ni siquiera es el consenso popular. Como muchos ven, ECMAScript tiene el estándar y JavaScript como lenguaje.
redfox05
1
@Rop - Actualice ese enlace: en.wikipedia.org/wiki/ECMAScript#Version_correspondence
HDave
55
Estoy en desacuerdo. ECMAScript es la especificación. JS, JScript, ActionScript son lenguajes que implementan dicha especificación.
adripanico
611

Creo que se debe una pequeña lección de historia.

Originalmente, JavaScript se llamaba Mocha y se cambió a Livescript, pero finalmente se convirtió en JavaScript.

Es importante tener en cuenta que JavaScript vino antes de ECMAscript y el historial le dirá por qué.

Para comenzar desde el principio, JavaScript deriva su nombre de Java e inicialmente se le pidió a Brendan Eich (el creador de JS) que desarrollara un lenguaje que se asemejara a Java para la web para Netscape.

Eich, sin embargo, decidió que Java era demasiado complicado con todas sus reglas y se propuso crear un lenguaje más simple que incluso un principiante pudiera codificar. Esto es evidente en cosas como la relajación de la necesidad de tener un punto y coma.

Una vez que se completó el lenguaje, el equipo de marketing de Netscape solicitó a Sun que les permitiera nombrarlo JavaScript como un truco de marketing y, por lo tanto, por qué la mayoría de las personas que nunca han usado JavaScript piensan que está relacionado con Java.

Aproximadamente uno o dos años después del lanzamiento de JavaScript en el navegador, el IE de Microsoft tomó el lenguaje y comenzó a hacer sus propias implementaciones, como JScript. Al mismo tiempo, IE dominaba el mercado y poco después Netscape tuvo que cerrar su proyecto.

Antes de que Netscape cayera, decidieron comenzar un estándar que guiaría la ruta de JavaScript, llamado ECMAScript.

ECMAScript tuvo algunos lanzamientos y en 1999 lanzaron su última versión (ECMAScript 3) antes de entrar en hibernación durante los próximos 10 años. Durante estos 10 años, Microsoft dominó las escenas, pero al mismo tiempo no estaban mejorando su producto y, por lo tanto, nació Firefox (liderado por Eich) y un montón de otros navegadores como Chrome, Opera.

ECMAScript lanzó su quinta edición en 2009 (la cuarta edición fue abandonada) con características como el modo estricto. Desde entonces, ECMAScript ha ganado mucho impulso y está programado para lanzar su sexta edición en unos pocos meses a partir de ahora con los mayores cambios que ha tenido hasta ahora.

Puede usar una lista de características para ECMAScript 6 aquí http://kangax.github.io/es5-compat-table/es6/ y también el soporte del navegador. Incluso puede comenzar a escribir Ecmascript 6 como lo hace con CoffeeScript y usar un compilador para compilar hasta Ecmascript 5.

Si ECMAScript es el lenguaje y JavaScript es un dialecto es discutible, pero no importante. Si continúa pensando así, podría confundirlo. No existe un compilador que ejecute ECMAScript, y creo que JavaScript se considera el lenguaje que implementa un estándar llamado ECMAScript.

También hay otros lenguajes notables que implementan ECMAScript como ActionScript (utilizado para Flash)

Yang Li
fuente
1
Para aquellos interesados ​​en cómo compilar / transpilar el nuevo estándar ES2015 hasta el código ECMAScript 5, querrá consultar Babel (anteriormente 6to5) disponible en babeljs.io o traceur en github.com/google/traceur-compiler . Con estas herramientas disponibles, no hay ninguna razón por la que no pueda comenzar a escribir "nuevo JavaScript" en este momento, y aproveche todas las últimas incorporaciones al lenguaje.
LWurm
1
No sabía que Lua implementa ECMAScript. Parece que no puedo encontrar nada que corrobore eso. Cual es tu fuente
Battmanz
2
@YangLi ¿Está de acuerdo con la respuesta de Jerone a continuación, que los lenguajes ECMAScript no incluyen la API DOM que todos usamos al escribir JavaScript puro?
theJollySin
11
@theJollySin Sí, tiene razón. ECMAScript no fue diseñado específicamente para el navegador, por lo que métodos como document.getElementById y otras API DOM no son parte del estándar. Pertenecen a los estándares WHATWG, junto con algún otro método específico del navegador como localStorage, etc. Si toma el nodo y no usa ningún módulo importado, entonces tiene la API ECMAScript solamente.
Yang Li
1
¿Cómo pueden varios idiomas implementar el mismo estándar y no ser el mismo idioma? El estándar define el idioma. Si algún lenguaje implementa el estándar C ++, se llama C ++, no otra cosa (exactamente porque implementa ese estándar). Entonces todavía tengo la misma pregunta ... ¿cuál es la diferencia?
Neme
157

ECMAScript = ES:

  • ECMAScript es un estándar para lenguajes de script.

  • Los lenguajes como Javascript se basan en el estándar ECMAScript.

  • El estándar ECMA se basa en varias tecnologías de origen, la más conocida es JavaScript (Netscape) y JScript (Microsoft).

  • ECMA significa Asociación Europea de Fabricantes de Computadoras

JavaScript = JS:

  • JavaScript es la implementación más popular del estándar ECMAScript.

  • Las características principales de Javascript se basan en el estándar ECMAScript, pero Javascript también tiene otras características adicionales que no están en las especificaciones / estándar de ECMA.

  • ActionScript y JScript son otros lenguajes que implementan el ECMAScript.

  • JavaScript se envió a ECMA para la estandarización, pero debido a problemas de marca registrada con el nombre Javascript, el estándar se llamó ECMAScript.

  • Cada navegador tiene un intérprete de JavaScript.

ES5 = ECMAScript 5:

  • ES5 es una versión del ECMAScript (antiguo / actual).

  • ES5 es el JavaScript que conoce y usa en el navegador hoy.

  • ES5 no requiere un paso de compilación (transpiladores) para transformarlo en algo que se ejecute en los navegadores actuales.

  • La versión 5 de ECMAScript se terminó en diciembre de 2009, las últimas versiones de todos los principales navegadores (Chrome, Safari, Firefox e IE) han implementado la versión 5.

  • La versión 5.1 se terminó en junio de 2011.

ES6 = ECMAScript 6 = ES2015 = ECMAScript 2015:

  • ES2015 es una versión del ECMAScript (nuevo / futuro).

  • Oficialmente, se debe usar el nombre ES2015 en lugar de ES6.

  • ES6 abordará muchas de las deficiencias del lenguaje central tratadas en TypeScript y CoffeeScript.

  • ES6 es la próxima iteración de JavaScript, pero no se ejecuta en los navegadores actuales.

  • Hay bastantes transpiladores que exportarán ES5 para ejecutarse en navegadores.

BabelJS:

  • BabelJS es el transpiler más popular que transforma el nuevo JavaScript ES6 en el antiguo JavaScript ES5.

  • BabelJS hace posible escribir la próxima generación de JavaScript hoy (significa ES2015).

  • BabelJS simplemente toma el archivo ES2015 y lo transforma en un archivo ES5.

  • Las versiones actuales de los navegadores ahora pueden entender el nuevo código JavaScript (ES2015), incluso si aún no lo admiten.

TypeScript y CoffeeScript:

  • Ambos proporcionan azúcar sintáctica sobre ES5 y luego se transcompilan en JavaScript compatible con ES5. 

  • Escribe TypeScript o CoffeeScript y luego el transpilador lo transforma en JavaScript ES5.

Mahmoud Zalt
fuente
3
" Javascript también tiene otras características adicionales que no están en las especificaciones / estándar de ECMA " ¿Podría darnos algunos ejemplos de esas características?
Aruna Herath
1
" JavaScript es la implementación más popular del estándar ECMAScript " . Entonces, ¿dónde puedo encontrar la fuente de esta implementación llamada 'JavaScript'?
bzeaman
77
Con mi pregunta, estoy tratando de señalar una posible incorrección en la redacción de la respuesta. Se usa la palabra 'implementación'. Se dice que JavaScript es 'la implementación más popular '. Una implementación es una ' realización de una especificación técnica'. Lo que se traduce en software . Entonces me pregunto dónde está este software llamado 'JavaScript'.
bzeaman
44
@Corrodias Estoy de acuerdo en que se siente como pellizcar, pero creo que es sensato hacerlo cuando la respuesta se trata de definir las cosas. JavaScript es un lenguaje, hoy en día estandarizado por ECMAscript comparable a cómo C es un lenguaje que está estandarizado por los estándares ISO. Un término para JavaScript sería simplemente 'lenguaje', nada más.
bzeaman
44
Los resúmenes de ES5, ES2015 y BabelJS realmente aclaran las confusiones que uno podría tener cuando aterriza en el mundo de scripts JS de la programación del lado del servidor. Gran respuesta. +1
RBT
45

JavaScript = ECMAScript + DOM + BOM ;

  • La especificación del lenguaje ECMAScript® define toda la lógica para crear y editar objetos, matrices, números, etc.

  • DOM ( D DOCUMENTO O bject M odelo) hace que sea posible la comunicación con los documentos HTML / XML (por ejemplo document.getElementById('id');).

  • BOM ( B rowser O bject M odel ) es la jerarquía de los objetos del navegador (por ejemplo, objeto de ubicación, objeto de historial, elementos de formulario).

Historial de nombres de JavaScript:

Mocha ► LiveScript ► JavaScript ► (parte de JS resultó en) ECMA-262 ► ECMAScript ► JavaScript (consta de ECMAScript + DOM + BOM)

Jerone
fuente
77
Entonces, ¿qué hay en node.js no es JavaScript? Porque no tiene la API DOM.
Aruna Herath
44
Eso es correcto. "Node.js está construido contra las versiones modernas de V8". & "V8 implementa ECMAScript como se especifica en ECMA-262, 5ª edición ..." & "Sin embargo, el DOM no lo proporciona típicamente el motor de JavaScript, sino un navegador. Lo mismo es cierto de V8: Google Chrome proporciona DOM ". (Fuente: nodejs.org/en/docs/es6 & github.com/v8/v8/wiki/Introduction )
jerone
77
@jerone ¿Qué versión de ECMAScript estoy usando cuando escribo código JavaScript? ¿Varía según el navegador o la biblioteca?
theJollySin
44
¿Puedes dar una referencia a JavaScript = ECMAScript + DOM API;?
Koray Tugay
2
@ koray-tugay Excepto aquí, no hay mucha documentación sobre qué es exactamente JavaScript. Supongo que es por eso que esta pregunta es tan popular. La "fórmula" JavaScript = ECMAScript + DOM API;se basa únicamente en los términos documentados acordados en general en los que consiste JavaScript.
Jerone
42

Técnicamente, ECMAScript es el lenguaje que todos usan e implementan: es la especificación creada hace muchos años cuando Netscape y Microsoft se sentaron e intentaron estandarizar las secuencias de comandos entre JavaScript (lenguaje de secuencias de comandos de Netscape) y JScript (Microsoft).

Posteriormente, todos estos motores están implementando ostensiblemente ECMAScript, sin embargo, JavaScript (el nombre) ahora se cuelga tanto por razones de nomenclatura tradicionales como por Mozilla como término de marketing para sus diversas extensiones no estándar (que quieren poder "versionar" en realidad )

olliej
fuente
12
¿Netscape y Microsoft se llevaron bien una vez?
Cole Johnson
2
Pensé que Brandon quería hacer de JS un estándar antes de Microsoft, y el único que pudo encontrar fue ECMA.
Joe Simmons
30

¿Qué es ECMAScript, es decir, ES?

ECMAScript es un estándar para un lenguaje de script y el lenguaje Javascript se basa en el estándar ECMAScript.

¿Es Javascript exactamente igual que ECMAScript?

  • No, Javascript no es exactamente equivalente a ECMAScript.
  • Las características principales de Javascript se basan en el estándar ECMAScript, pero Javascript también tiene otras características adicionales que no están en las especificaciones / estándar de ECMA.

JavaScript = ECMAScript + DOM API;

DOM API como: document.getElementById('id');

¿Otros idiomas usan el estándar ECMAScript?

  • Sí, hay otros lenguajes además de JavaScript que también implementan el Estándar ECMAScript como núcleo.
  • ActionScript (usado por Adobe Flash) y JScript (usado por Microsoft) son lenguajes que implementan el estándar ECMAScript.

¿Por qué se llama ECMAScript?

  • Javascript se creó originalmente en Netscape, y querían estandarizar el idioma. Así, se sometieron a la lengua del E uropea C omputer M de anufacturer A sociación (ECMA) para la normalización.
  • Pero, hubo problemas de marca registrada con el nombre Javascript, y el estándar se llamó ECMAScript, que es el nombre que tiene hoy también.
  • Debido a problemas de marca registrada, la versión del lenguaje de Microsoft se llama JScript, aunque JScript es, en esencia, el mismo lenguaje que Javascript.
Imran Ahmad
fuente
Hay cursos sobre JS simple y ES6 JS. ¿Cuál deberíamos tomar? ¿El ES6 se usa más en entornos profesionales? Gracias.
MasterJoe2
16

Varias versiones de JavaScript son implementaciones del estándar ECMAScript.

canen
fuente
11

Sé que esta es una publicación antigua, pero espero que esto ayude a alguien.

En la década de 1990, comenzaron a salir diferentes versiones de js como javascript de netscape, script Js de Microsoft. Entonces, ecmascript se introdujo como estándar. Pero ecmascript forma solo una parte de javascript que especifica su sintaxis central, tipos, objetos, etc. Probablemente eso explica las implementaciones inconsistentes de javascript en diff. navegadores

Referencia - Wrox (Javascript profesional para desarrolladores web)

depz123
fuente
10

En mi opinión, ECMAScript es la "Teoría" o "Especificación", y Javascript es "Prácticas" o "Implementación".

Rethna
fuente
10

JavaScript es un lenguaje ECMAScript.

ECMAScript no es necesariamente JavaScript.

ryansstack
fuente
7

Las respuestas existentes parafrasean bastante bien el punto principal.

El punto principal es que ECMAScript es el lenguaje abstracto simple, sin extensiones específicas de dominio, es inútil en sí mismo. La especificación define solo el lenguaje y los objetos principales del mismo.

Si bien JavaScript y ActionScript y otros dialectos le agregan la biblioteca específica del dominio, puede usarlo para algo significativo.

Hay muchos motores ECMAScript , algunos de código abierto, otros son propietarios. Puede vincularlos a su programa y luego agregar sus funciones nativas al objeto global para que su programa se convierta en scriptable. Aunque con mayor frecuencia se usan en navegadores.

Calmarius
fuente
5

Javascript era el nombre original, destinado a capitalizar la popularidad de Java. ECMA es el organismo de estándares que supervisa el estándar que finalmente se implementó para que los nombres sean más o menos equivalentes.

Las implementaciones tienen otros nombres, como V8 o Rhino, etc.

Jeremy Huiskamp
fuente
3

ECMAScript es un estándar para JavaScrip t, mire estas declaraciones de MDN :

ingrese la descripción de la imagen aquí

JavaScript

JavaScript (JS) es un lenguaje de programación ligero interpretado o compilado JIT con funciones de primera clase. Si bien es más conocido como el lenguaje de secuencias de comandos para páginas web, muchos entornos que no son del navegador también lo usan, como node.js, Apache CouchDB y Adobe Acrobat. JavaScript es un lenguaje dinámico basado en prototipos, multi-paradigma, que admite estilos orientados a objetos, imperativos y declarativos (por ejemplo, programación funcional). Lea más sobre JavaScript.


ECMAScript

El estándar para JavaScript es ECMAScript . A partir de 2012, todos los navegadores modernos son totalmente compatibles con ECMAScript 5.1. Los navegadores más antiguos soportan al menos ECMAScript 3. El 17 de junio de 2015, ECMA International publicó la sexta versión principal de ECMAScript, que oficialmente se llama ECMAScript 2015, y que inicialmente se denominó ECMAScript 6 o ES6. Desde entonces, los estándares ECMAScript están en ciclos de lanzamiento anuales. Esta documentación se refiere a la última versión preliminar, que actualmente es ECMAScript 2018.

Para más información, visite aquí.

Alireza
fuente
3

Aquí están mis hallazgos:

JavaScript: La Guía definitiva , escrita por David Flanagan, ofrece una explicación muy concisa:

JavaScript se creó en Netscape en los primeros días de la Web y, técnicamente, "JavaScript" es una marca comercial con licencia de Sun Microsystems (ahora Oracle) que se usa para describir la implementación del lenguaje por parte de Netscape (ahora Mozilla). Netscape envió el lenguaje para su estandarización a ECMA y debido a problemas con la marca registrada, la versión estandarizada del lenguaje se quedó con el incómodo nombre "ECMAScript". Por las mismas razones de marca registrada, la versión del lenguaje de Microsoft se conoce formalmente como "JScript". En la práctica, casi todos llaman al lenguaje JavaScript.

Una publicación de blog de Microsoft parece estar de acuerdo con lo que Flanagan explica al decir ...

ECMAScript es el nombre oficial del lenguaje JavaScript que todos conocemos y amamos.

.. lo que me hace pensar que todas las ocurrencias JavaScripten esta publicación de referencia (por Microsoft nuevamente) deben ser reemplazadas por ECMASCript. En realidad, parecen tener cuidado al usar ECMAScriptsolo en esta página de documentación más reciente y más técnica.

w3schools.com parece estar de acuerdo con las definiciones anteriores:

JavaScript fue inventado por Brendan Eich en 1995, y se convirtió en un estándar ECMA en 1997. ECMA-262 es el nombre oficial del estándar. ECMAScript es el nombre oficial del idioma.

La clave aquí es: el nombre oficial del idioma .

Si revisa las páginas de la versión JavaScript de Mozilla , encontrará la siguiente declaración:

Obsoleto. El control de versiones explícito y la aceptación de las características del lenguaje era específico de Mozilla y están en proceso de eliminación. Firefox 4 fue la última versión que se refería a una versión de JavaScript (1.8.5). Con los nuevos estándares ECMA, las características del lenguaje JavaScript ahora se mencionan a menudo con su definición inicial en las ediciones ECMA-262, como ECMAScript 2015.

y cuando vea las notas de la versión reciente, siempre verá referencias a los estándares ECMAScript, tales como:

  • Se ha implementado la propiedad Symbol.toStringTag ES2015 (error 1114580).

  • Se han implementado los métodos ES2015 TypedArray.prototype.toString () y TypedArray.prototype.toLocaleString () (error 1121938).

Mozilla Web Docs también tiene una página que explica la diferencia entre ECMAScript y JavaScript:

Sin embargo, el término general "JavaScript" tal como se entiende en un contexto de navegador web contiene varios elementos muy diferentes. Uno de ellos es el lenguaje central (ECMAScript), otro es la colección de las API web, incluido el DOM (Modelo de objetos de documento).

Conclusión

Según tengo entendido, la gente usa la palabra JavaScript de forma un tanto liberal para referirse a la especificación principal de ECMAScript.

Yo diría que todas las implementaciones de JavaScript modernas (o motores de JavaScript) son, de hecho, implementaciones de ECMAScript. Verifique la definición del motor V8 de Google, por ejemplo:

V8 es el motor de JavaScript de alto rendimiento de código abierto de Google, escrito en C ++ y utilizado en Google Chrome, el navegador de código abierto de Google y en Node.js, entre otros. Implementa ECMAScript como se especifica en ECMA-262.

Parecen usar la palabra JavaScript y ECMAScript indistintamente, y yo diría que en realidad es un motor ECMAScript.

Por lo tanto, la mayoría de los motores JavaScript están implementando el estándar ECMAScript, pero en lugar de llamarlos motores ECMAScript, se denominan motores JavaScript. Esta respuesta también apoya la forma en que veo la situación.

Koray Tugay
fuente
2

Dudo que alguna vez usemos la palabra "ECMAScript" si no fuera por el hecho de que el nombre "JavaScript" es propiedad de Sun. Para todos los efectos, el lenguaje es JavaScript. No vas a la librería buscando libros de ECMAScript, ¿verdad?

Es un poco demasiado simple decir que "JavaScript" es la implementación. JScript es la implementación de Microsoft.

Nosredna
fuente
1
No tengo ningún problema con la palabra ECMAscript ... ¿Alguna vez pensaste que es extraño decir MPEG, en lugar de video?
ryansstack
77
Jaja. ¿No fue Brendan Eich quien dijo que ECMAScript sonaba como una enfermedad de la piel? :-)
Nosredna
77
Sun posee la palabra Java, no JavaScript.
James R. Clayton
1
@ JamesR.Clayton JavaScript fue creado en Netscape en los primeros días de la Web, y técnicamente, "JavaScript" es una marca registrada con licencia de Sun Microsystems (ahora Oracle) utilizada para describir la implementación del lenguaje por parte de Netscape (ahora Mozilla).
Koray Tugay
1

JavaScript es una rama de lenguajes formados alrededor del estándar ECMAScript. Creo que ECMA es la Asociación Europea de Fabricantes de Computadoras, no es que esto sea realmente relevante ni nada.

No olvide que otro lenguaje popular formado alrededor del estándar ECMA Script es ActionScript, utilizado en Adobe Flash / Flex.

JAL
fuente