Qual é a diferença entre JavaScript e ECMAScript?

462

Qual é a diferença entre ECMAScript e JavaScript? Pelo que deduzi, o ECMAScript é o padrão e o JavaScript é a implementação. Isso está correto?

Cara
fonte

Respostas:

183

ECMAScript é a linguagem, enquanto JavaScript, JScript e até o ActionScript 3 são chamados de "dialetos". A Wikipedia lança alguma luz sobre isso.

Ryan Florence
fonte
9
o que seria muito bom é um claro mapeamento entre versões de JavaScript e ECMAScript, por exemplo ES5 corresponde a JS1.5 etc. ah eu achei: en.wikipedia.org/wiki/JavaScript#Versions
Sam Joseph
2
@Sam - atualização do link de Sam: en.wikipedia.org/wiki/JavaScript#Version_history
Rop
65
Yang Li com votos negativos e negativos, pois essa resposta diz muito pouco e basicamente indica a Wikipedia. A resposta de Yang Li é muito mais detalhada e útil. Além disso, se um é o idioma / padrão e outro o dialeto, ou a implementação etc, está aberto à opinião, e não a fatos, pelo que entendi. Considerando que esta resposta faz parecer que é fato. Corrija-me se eu estiver enganado. De fato, eu argumentaria que a sugestão por essa resposta nem sequer é o consenso popular. Como a maioria vê, o ECMAScript tem o padrão e o JavaScript como idioma.
precisa saber é o seguinte
1
@Rop - Atualize para esse link: en.wikipedia.org/wiki/ECMAScript#Version_correspondence
HDave
5
Discordo. ECMAScript é a especificação. JS, JScript, ActionScript são linguagens que implementam essa especificação.
adripanico
611

Eu acho que uma pequena lição de história está prevista.

O JavaScript foi originalmente chamado Mocha e alterado para Livescript, mas acabou se tornando JavaScript.

É importante observar que o JavaScript veio antes do ECMAscript e o histórico informará o motivo.

Para começar do início, o JavaScript derivou seu nome de Java e, inicialmente, foi solicitado a Brendan Eich (o criador do JS) que desenvolvesse uma linguagem que se assemelhasse a Java para a Web do Netscape.

Eich, no entanto, decidiu que o Java era muito complicado com todas as suas regras e decidiu criar uma linguagem mais simples que até um iniciante poderia codificar. Isso é evidente em coisas como o relaxamento da necessidade de um ponto e vírgula.

Depois que a linguagem foi concluída, a equipe de marketing da Netscape solicitou à Sun que lhes permitisse chamá-la de JavaScript como um truque de marketing e, portanto, por que a maioria das pessoas que nunca usou o JavaScript acha que isso está relacionado ao Java.

Cerca de um ano ou dois após o lançamento do JavaScript no navegador, o IE da Microsoft adotou a linguagem e começou a fazer suas próprias implementações, como o JScript. Ao mesmo tempo, o IE estava dominando o mercado e pouco tempo depois a Netscape teve que fechar seu projeto.

Antes de o Netscape cair, eles decidiram iniciar um padrão que guiaria o caminho do JavaScript, chamado ECMAScript.

O ECMAScript teve alguns lançamentos e, em 1999, eles lançaram sua última versão (ECMAScript 3) antes de entrar em hibernação pelos próximos 10 anos. Durante esses 10 anos, a Microsoft dominou as cenas, mas ao mesmo tempo não estava melhorando seu produto e, portanto, o Firefox nasceu (liderado por Eich) e vários outros navegadores, como Chrome, Opera.

O ECMAScript lançou sua 5ª edição em 2009 (a 4ª edição foi abandonada) com recursos como o modo estrito. Desde então, o ECMAScript ganhou muito ímpeto e está programado para lançar sua 6ª edição dentro de alguns meses, com as maiores mudanças até agora.

Você pode usar uma lista de recursos do ECMAScript 6 aqui http://kangax.github.io/es5-compat-table/es6/ e também o suporte ao navegador. Você pode até começar a escrever o Ecmascript 6 como no CoffeeScript e usar um compilador para compilar o Ecmascript 5.

Se ECMAScript é a linguagem e JavaScript é um dialeto é discutível, mas não importante. Se você continuar pensando assim, pode confundir você. Não existe nenhum compilador que execute o ECMAScript, e acredito que o JavaScript seja considerado a linguagem que implementa um padrão chamado ECMAScript.

Também existem outras linguagens perceptíveis que implementam o ECMAScript, como o ActionScript (usado para Flash)

Yang Li
fonte
1
Para aqueles interessados ​​em como compilar / transpilar o novo padrão do ES2015 para o código ECMAScript 5, consulte Babel (anteriormente 6to5) disponível em babeljs.io ou traceur em github.com/google/traceur-compiler . Com essas ferramentas disponíveis, não há razão para que você não possa começar a escrever "novo JavaScript" agora e tirar proveito de todas as adições mais recentes ao idioma.
LWurm
1
Eu não sabia que Lua implementa ECMAScript. Não consigo encontrar nada que corrobore isso. Qual é a sua fonte?
battmanz
2
@YangLi Você concorda com a resposta de jerone abaixo, que as linguagens ECMAScript não incluem a API DOM que todos usamos ao escrever JavaScript puro?
theJollySin
11
@theJollySin Sim, ele está correto. O ECMAScript não foi projetado especificamente para o navegador, portanto, métodos como document.getElementById e outras APIs do DOM não fazem parte do padrão. Eles pertencem aos padrões WHATWG, juntamente com algum outro método específico do navegador, como localStorage etc. Se você pegar o nó e não usar nenhum módulo importado, terá a API somente ECMAScript.
Yang Li
1
Como vários idiomas podem implementar o mesmo padrão e não o mesmo idioma? O padrão define o idioma. Se alguma linguagem implementa o padrão C ++, ele é chamado C ++, e não outra coisa (exatamente porque implementa esse padrão). Então, eu ainda tenho a mesma pergunta ... qual é a diferença?
Neme 26/01
157

ECMAScript = ES:

  • ECMAScript é um padrão para linguagens de script.

  • Idiomas como Javascript são baseados no padrão ECMAScript.

  • O ECMA Standard é baseado em várias tecnologias de origem, sendo as mais conhecidas JavaScript (Netscape) e JScript (Microsoft).

  • ECMA significa Associação Europeia de Fabricantes de Computadores

JavaScript = JS:

  • JavaScript é a implementação mais popular do ECMAScript Standard.

  • Os principais recursos do Javascript são baseados no padrão ECMAScript, mas o Javascript também possui outros recursos adicionais que não estão nas especificações / padrão do ECMA.

  • ActionScript e JScript são outras linguagens que implementam o ECMAScript.

  • O JavaScript foi enviado à ECMA para padronização, mas devido a problemas de marca registrada com o nome Javascript, o padrão passou a se chamar ECMAScript.

  • Todo navegador tem um intérprete de JavaScript.

ES5 = ECMAScript 5:

  • ES5 é uma versão do ECMAScript (antiga / atual).

  • ES5 é o JavaScript que você conhece e usa no navegador hoje.

  • O ES5 não requer uma etapa de construção (transpilers) para transformá-lo em algo que será executado nos navegadores de hoje.

  • O ECMAScript versão 5 foi concluído em dezembro de 2009, as versões mais recentes de todos os principais navegadores (Chrome, Safari, Firefox e IE) implementaram a versão 5.

  • A versão 5.1 foi concluída em junho de 2011.

ES6 = ECMAScript 6 = ES2015 = ECMAScript 2015:

  • ES2015 é uma versão do ECMAScript (nova / futura).

  • Oficialmente, o nome ES2015 deve ser usado em vez de ES6.

  • O ES6 abordará muitas das principais deficiências da linguagem abordadas no TypeScript e CoffeeScript.

  • O ES6 é a próxima iteração do JavaScript, mas não é executado nos navegadores de hoje.

  • Existem alguns transpilers que exportam o ES5 para execução em navegadores.

BabelJS:

  • O BabelJS é o transpilador mais popular que transforma o novo JavaScript ES6 em JavaScript antigo ES5.

  • O BabelJS torna possível escrever a próxima geração de JavaScript hoje (significa ES2015).

  • O BabelJS simplesmente pega o arquivo ES2015 e o transforma em arquivo ES5.

  • As versões atuais dos navegadores agora podem entender o novo código JavaScript (ES2015), mesmo se ainda não o suportar.

TypeScript e CoffeeScript:

  • Ambos fornecem açúcar sintático sobre o ES5 e, em seguida, são compilados em JavaScript compatível com o ES5. 

  • Você escreve TypeScript ou CoffeeScript e o transpiler o transforma em JavaScript ES5.

Mahmoud Zalt
fonte
3
"O Javascript também possui outros recursos adicionais que não estão nas especificações / padrão da ECMA ". Você poderia dar alguns exemplos desses recursos?
Aruna Herath
1
"O JavaScript é as implementações mais populares do ECMAScript Standard. " Então, onde posso encontrar a fonte dessa implementação chamada 'JavaScript'?
bzeaman
7
Com a minha pergunta, estou tentando apontar uma potencial incorreta na redação da resposta. A palavra 'implementação' é usada. É dito que o JavaScript é 'a implementação mais popular '. Uma implementação é uma ' realização de uma especificação técnica'. O que se traduz em software . Então, eu me pergunto onde está esse software chamado 'JavaScript'.
bzeaman
4
@Cododias Eu concordo que parece uma escolha absurda, mas acho que é sensato fazer quando a resposta é sobre definir as coisas. O JavaScript é uma linguagem atualmente padronizada pelo ECMAscript comparável à forma como C é uma linguagem padronizada pelos padrões ISO. Um termo para JavaScript seria simplesmente "linguagem", nada mais.
bzeaman
4
Os resumos do ES5, ES2015 e BabelJS realmente limpam o ar em muitas confusões que se pode ter quando ele chega ao mundo atual dos scripts JS a partir da programação do servidor. Ótima resposta. +1
RBT
45

JavaScript = ECMAScript + DOM + BOM ;

  • A especificação de idioma do ECMAScript® define toda a lógica para criar e editar objetos, matrizes, números, etc ...

  • DOM ( D ocument O bject M odelo) torna possível comunicar com documentos de HTML / XML (por exemplo document.getElementById('id');).

  • BOM ( B linhaser O bject M odelo) representa a hierarquia de objectos navegador (por exemplo, objecto localização, objecto historial, elementos de forma).

Histórico de nomeação de JavaScript:

Mocha ► LiveScript ► JavaScript ► (parte do JS resultou em) ECMA-262 ► ECMAScript ► JavaScript (consiste em ECMAScript + DOM + BOM)

Jerone
fonte
7
Então, o que há no node.js não é JavaScript? Porque não possui a API DOM.
Aruna Herath #
4
Está correto. "O Node.js foi desenvolvido com base nas versões modernas da V8." & "V8 implementa ECMAScript conforme especificado em ECMA-262, 5ª edição ..." & "No entanto, o DOM normalmente não é fornecido pelo mecanismo JavaScript, mas por um navegador. O mesmo ocorre com a V8 - o Google Chrome fornece o DOM ". (Fonte: nodejs.org/en/docs/es6 & github.com/v8/v8/wiki/Introduction )
jerone
7
@jerone Que versão do ECMAScript estou usando quando escrevo código JavaScript? Isso varia de acordo com o navegador ou a biblioteca?
theJollySin
4
Você pode dar uma referência JavaScript = ECMAScript + DOM API;?
Koray Tugay
2
@ koray-tugay Exceto aqui, não há muita documentação sobre o que é exatamente o JavaScript. Eu acho que é por isso que essa pergunta é tão popular. A "fórmula" JavaScript = ECMAScript + DOM API;baseia-se apenas nos termos documentados acordados em geral nos quais o JavaScript consiste.
Jerone
42

Tecnicamente, o ECMAScript é a linguagem que todos estão usando e implementando - é a especificação criada há muitos anos quando a Netscape e a Microsoft se sentaram e tentaram padronizar os scripts entre JavaScript (linguagem de script da Netscape) e JScript (Microsoft).

Posteriormente, todos esses mecanismos estão implementando ostensivamente o ECMAScript, no entanto, o JavaScript (o nome) agora permanece por ambos os motivos tradicionais de nomeação e como um termo de marketing da Mozilla para suas várias extensões não-padrão (que eles querem realmente "versão" )

olliej
fonte
12
Netscape e Microsoft realmente se deram bem uma vez ?!
Cole Johnson
2
Eu pensei que Brandon queria tornar o JS um padrão antes da Microsoft, e o único que ele conseguiu encontrar foi o ECMA.
21713 Joe Simmons
30

O que é o ECMAScript, ou seja, ES?

ECMAScript é um padrão para uma linguagem de script e a linguagem Javascript é baseada no padrão ECMAScript.

Javascript é exatamente o mesmo que ECMAScript?

  • Não, o Javascript não é exatamente equivalente ao ECMAScript.
  • Os principais recursos do Javascript são baseados no padrão ECMAScript, mas o Javascript também possui outros recursos adicionais que não estão nas especificações / padrão do ECMA.

JavaScript = ECMAScript + API DOM;

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

Outros idiomas usam o padrão ECMAScript?

  • Sim, existem outros idiomas além do JavaScript que também implementam o ECMAScript Standard como núcleo.
  • ActionScript (usado pelo Adobe Flash) e JScript (usado pela Microsoft) são os dois idiomas que implementam o padrão ECMAScript.

Por que é chamado ECMAScript?

  • O Javascript foi criado originalmente no Netscape e eles queriam padronizar o idioma. Então, eles submetidos a língua para o E uropeia C omputer M de ABRICANTE A SSOCIAÇÃO (ECMA) para padronização.
  • Porém, houve problemas de marca registrada com o nome Javascript, e o padrão passou a ser chamado de ECMAScript, que também é o nome atual.
  • Por causa de problemas de marca registrada, a versão da linguagem da Microsoft se chama JScript - mesmo que o JScript seja, em sua essência, a mesma linguagem do Javascript.
Imran Ahmad
fonte
Existem cursos sobre JS simples e ES6 JS. Qual deles devemos tomar? O ES6 é usado mais em ambientes profissionais? Obrigado.
MasterJoe2
16

Várias versões JavaScript são implementações do padrão ECMAScript.

canen
fonte
11

Eu sei que este é um post antigo, mas espero que isso ajude alguém.

Nos anos 90, diferentes versões do js começaram a sair como javascript do netscape, script Js da Microsoft. Então, o ecmascript foi introduzido como padrão. Mas o ecmascript forma apenas uma parte do javascript que especifica sua sintaxe principal, tipos, objetos etc. Provavelmente isso explica as implementações inconsistentes do javascript no diff. navegadores

Reference - Wrox (Javascript profissional para desenvolvedores web)

depz123
fonte
10

No meu entendimento, ECMAScript é a "Teoria" ou "Especificação" e Javascript é "Práticas" ou "Implementação".

Rethna
fonte
10

JavaScript é uma linguagem ECMAScript.

O ECMAScript não é necessariamente JavaScript.

ryansstack
fonte
7

As respostas existentes parafrasearam bem o ponto principal.

O ponto principal é que o ECMAScript é a linguagem abstrata, sem extensões específicas de domínio, é inútil em si. A especificação define apenas a linguagem e os objetos principais dela.

Enquanto o JavaScript, o ActionScript e outros dialetos adicionam a biblioteca específica do domínio, você pode usá-la para algo significativo.

Existem muitos mecanismos ECMAScript , alguns deles são de código aberto, outros são proprietários. Você pode vinculá-los ao seu programa e adicionar suas funções nativas ao objeto global para que seu programa se torne programável. Embora na maioria das vezes eles sejam usados ​​em navegadores.

Calmarius
fonte
5

Javascript era o nome original, destinado a capitalizar a popularidade do java. A ECMA é o órgão de padrões que supervisiona o padrão que acabou sendo posto em prática, portanto os nomes são aproximadamente equivalentes.

As implementações têm outros nomes, como V8 ou Rhino, etc.

Jeremy Huiskamp
fonte
3

ECMAScript é um padrão para JavaScrip t, veja estas instruções do MDN :

insira a descrição da imagem aqui

Javascript

JavaScript (JS) é uma linguagem de programação leve, interpretada ou compilada por JIT, com funções de primeira classe. Embora seja mais conhecida como a linguagem de script para páginas da Web, muitos ambientes que não são de navegador também a usam, como node.js, Apache CouchDB e Adobe Acrobat. JavaScript é uma linguagem dinâmica baseada em protótipos, com vários paradigmas, que suporta estilos orientados a objetos, imperativos e declarativos (por exemplo, programação funcional). Leia mais sobre JavaScript.


ECMAScript

O padrão para JavaScript é ECMAScript . A partir de 2012, todos os navegadores modernos suportam totalmente o ECMAScript 5.1. Navegadores mais antigos oferecem suporte a pelo menos ECMAScript 3. Em 17 de junho de 2015, a ECMA International publicou a sexta versão principal do ECMAScript, oficialmente denominada ECMAScript 2015, e foi inicialmente denominada ECMAScript 6 ou ES6. Desde então, os padrões ECMAScript estão em ciclos de lançamento anuais. Esta documentação refere-se à versão de rascunho mais recente, atualmente no ECMAScript 2018.

Para mais informações, visite aqui

Alireza
fonte
3

Aqui estão minhas descobertas:

JavaScript: O Guia Definitivo , escrito por David Flanagan, fornece uma explicação muito concisa:

JavaScript foi criado na Netscape nos primeiros dias da Web e, tecnicamente, "JavaScript" é uma marca comercial licenciada da Sun Microsystems (agora Oracle) usada para descrever a implementação da linguagem pelo Netscape (agora Mozilla). A Netscape enviou o idioma para padronização à ECMA e, devido a problemas de marcas registradas, a versão padronizada do idioma ficou com o nome estranho "ECMAScript". Pelas mesmas razões de marca registrada, a versão da linguagem da Microsoft é formalmente conhecida como "JScript". Na prática, quase todo mundo chama a linguagem JavaScript.

Um post da Microsoft parece concordar com o que Flanagan explica dizendo:

ECMAScript é o nome oficial da linguagem JavaScript que todos conhecemos e amamos.

.. o que me faz pensar que todas as ocorrências JavaScriptno presente pós referência (por Microsoft novamente) deve ser substituído por ECMASCript. Na verdade, eles parecem ter cuidado ao usar ECMAScriptapenas nesta página de documentação mais recente e mais técnica.

O w3schools.com parece concordar com as definições acima:

O JavaScript foi inventado por Brendan Eich em 1995 e tornou-se um padrão da ECMA em 1997. ECMA-262 é o nome oficial do padrão. ECMAScript é o nome oficial do idioma.

A chave aqui é: o nome oficial do idioma .

Se você verificar as páginas da versão JavaScript do Mozilla , encontrará a seguinte declaração:

Descontinuada. O controle de versão explícito e a inclusão de recursos de idioma eram específicos do Mozilla e estão sendo removidos. O Firefox 4 foi a última versão que se referiu a uma versão JavaScript (1.8.5). Com os novos padrões ECMA, os recursos da linguagem JavaScript agora são frequentemente mencionados com sua definição inicial nas Edições ECMA-262, como ECMAScript 2015.

e quando vir as notas de versão recentes, sempre verá referências aos padrões do ECMAScript, como:

  • A propriedade ES2015 Symbol.toStringTag foi implementada (bug 1114580).

  • Os métodos ES2015 TypedArray.prototype.toString () e TypedArray.prototype.toLocaleString () foram implementados (bug 1121938).

O Mozilla Web Docs também possui uma página que explica a diferença entre ECMAScript e JavaScript:

No entanto, o termo geral "JavaScript", conforme entendido em um contexto de navegador da Web, contém vários elementos muito diferentes. Um deles é a linguagem principal (ECMAScript), outro é a coleção de APIs da Web, incluindo o DOM (Document Object Model).

Conclusão

No meu entender, as pessoas usam a palavra JavaScript de maneira um tanto liberal para se referir à especificação central do ECMAScript.

Eu diria que todas as implementações modernas de JavaScript (ou JavaScript Engines) são, de fato, implementações de ECMAScript. Verifique a definição do mecanismo V8 do Google, por exemplo:

O V8 é o mecanismo JavaScript de alto desempenho e código-fonte aberto do Google, escrito em C ++ e usado no Google Chrome, o navegador de código aberto do Google e no Node.js, entre outros. Ele implementa o ECMAScript conforme especificado em ECMA-262.

Eles parecem usar a palavra JavaScript e ECMAScript de forma intercambiável, e eu diria que é realmente um mecanismo ECMAScript?

Portanto, a maioria dos mecanismos JavaScript está realmente implementando o padrão ECMAScript, mas, em vez de chamá-los de mecanismos ECMAScript, eles se denominam mecanismos JavaScript. Esta resposta também suporta o modo como vejo a situação.

Koray Tugay
fonte
2

Duvido que alguma vez usássemos a palavra "ECMAScript" se não fosse pelo fato de o nome "JavaScript" pertencer à Sun. Para todos os efeitos, o idioma é JavaScript. Você não vai à livraria procurando livros ECMAScript, não é?

É um pouco simples dizer que "JavaScript" é a implementação. JScript é a implementação da Microsoft.

Nosredna
fonte
1
Não tenho nenhum problema com a palavra ECMAscript ... você já pensou que é estranho dizer MPEG, em vez de vídeo?
26909 ryansstack
7
Haha Não foi Brendan Eich quem disse que o ECMAScript parecia uma doença de pele? :-)
Nosredna
7
A Sun possui a palavra Java, não JavaScript.
James R. Clayton
1
@ JamesR.Clayton JavaScript foi criado na Netscape nos primeiros dias da Web e, tecnicamente, “JavaScript” é uma marca comercial licenciada da Sun Microsystems (agora Oracle) usada para descrever a implementação da linguagem pelo Netscape (agora Mozilla).
Koray Tugay
1

JavaScript é um ramo de idiomas formado em torno do padrão ECMAScript. Acredito que a ECMA é a Associação Europeia de Fabricantes de Computadores, não que isso seja realmente relevante ou algo assim.

Não esqueça que outra linguagem popular formada em torno do padrão ECMA Script é o ActionScript, usado no Adobe Flash / Flex.

JAL
fonte