ECMAScript
ECMAScript (ou ES ) é a especificação técnica de uma linguagem de script , padronizada e mantida pela ECMA International em ECMA-262 e ISO/IEC 16262. As implementações mais conhecidas desta linguagem (muitas vezes referidas como dialetos) são JavaScript , JScript e ActionScript que entrou em uso generalizado inicialmente como linguagens do lado do cliente no desenvolvimento web .
História
As especificações definidas pelo ECMAScript são especificações padronizadas de uma linguagem desenvolvida por Brendan Eich da Netscape . Inicialmente chamava-se "Mocha", depois LiveScript e só por último JavaScript. [1] Em dezembro de 1995, a Sun Microsystems , juntamente com a Netscape, anunciou o JavaScript em um comunicado à imprensa. [2] Em março de 1996, o Netscape Navigator 2.0 foi lançado, tornando-o o primeiro navegador a suportar JavaScript.
Devido ao enorme sucesso do JavaScript como linguagem do lado do cliente, a Microsoft desenvolveu uma versão diferente, mas compatível da linguagem, chamando- a de JScript para evitar problemas de direitos autorais. JScript implementou novos métodos para calcular a data para resolver parcialmente os problemas devidos ao ano 2000 que atormentavam o JavaScript, pois a classe Date era baseada na classe Java de mesmo nome. [3] O JScript foi então incluído no Internet Explorer 3.0 , lançado em agosto de 1996.
A Netscape entregou JavaScript à Ecma International para trabalho de padronização e definição de especificações. Assim começou a ECMA-262 em novembro de 1996. [4] Esta primeira edição foi adotada pela Assembléia Geral da Ecma em junho de 1997 e várias edições da padronização foram publicadas desde então. O nome "ECMAScript" foi um compromisso entre as organizações envolvidas na padronização de linguagens, especialmente Netscape e Microsoft, cujas disputas dominaram a cena durante os primeiros dias desses padrões. Eich, de fato, comentou que "ECMAScript sempre foi um nome contratado, mas nunca pretendido, que soava muito como uma doença de pele". [5]
Embora JavaScript e JScript pretendam ser compatíveis com a especificação ECMAScript, eles fornecem funções adicionais não descritas pelo padrão ECMA ao mesmo tempo. [6]
Versões
10 edições do ECMA-262 foram publicadas até agora. Desde 2015, a publicação ocorre anualmente, por isso as edições também trazem no nome a referência ao ano de lançamento.
| Edição | Data de publicação | Primeiro nome | Alterações da edição anterior | editor |
|---|---|---|---|---|
| 1 | Junho de 1997 [7] | Primeira edição | Guy L. Steele, Jr. | |
| 2 | Junho de 1998 [8] | Alterações editoriais para manter as especificações consistentes com a ISO/IEC 16262 | Mike Cowlishaw | |
| 3 | Dezembro de 1999 [9] | Adicionadas expressões regulares , manipulação de strings aprimorada, novos comandos de controle, manipulação try/catch, formatação para saídas numéricas e outras melhorias. | Mike Cowlishaw | |
| 4 | Abandonado | A quarta edição foi abandonada devido à diversidade de ideias sobre a complexidade da linguagem. Muitos dos recursos que foram propostos para a quarta versão foram completamente descartados, enquanto outros foram revividos na versão 6. | ||
| 5 | Dezembro de 2009 | Adiciona o "modo estrito" destinado a fornecer uma verificação de erros mais completa e desencorajar os desenvolvedores de encontrar erros. Esclarece muitas ambiguidades introduzidas na terceira versão. Ele também adiciona alguns recursos como getters e setters, a biblioteca para suporte a JSON e reflexão nas propriedades do objeto. [10] | Pratap Lakshman , Allen Wirfs-Brock | |
| 5.1 | Junho de 2011 | Esta edição foi criada para alinhar a anterior com a norma internacional ISO/IEC 16262:2011. | Pratap Lakshman, Allen Wirfs-Brock | |
| 6 | Junho de 2015 [11] | ECMAScript 2015 (ES2015) | A sexta edição, conhecida como ECMAScript 2015 [12] mas também como "Harmony", traz mudanças sintáticas significativas que abrem as portas para aplicações mais complexas, incluindo classes e módulos definindo-os semanticamente como o "strict mode" em ECMAScript 5. Outras novidades recursos existem vários iteradores, for/of loop, geradores estilo Python e gerador de expressão, funções de seta, dados binários, arrays tipados, coleções (mapas, conjuntos e mapas fracos), promessas, melhorias de funções matemáticas, reflexão e proxies (metaprogramação para objetos virtuais). | Allen Wirfs-Brock |
| 7 | Junho de 2016 | ECMAScript 2016 (ES2016) | A sétima edição, também conhecida como ECMAScript 2016, é de fato um ajuste das mudanças introduzidas na edição anterior. No entanto, ele apresenta dois novos recursos: o operador expoente (**) e Array.prototype.includes. | Brian Terlson |
| 8 | Junho de 2017 | ECMAScript 2017 (ES2017) | veja Oitava Edição - ECMAScript 2017 | Brian Terlson |
| 9 | Junho de 2018 | ECMAScript 2018 (ES2018) | veja Nona Edição - ECMAScript 2018 | Brian Terlson |
| 10 | Junho de 2019 | ECMAScript 2019 (ES2019) | veja Décima Edição - ECMAScript 2019 | Brian Terlson, Bradley Farias, Jordan Harband |
| 11 | Junho de 2020 | ECMAScript 2020 (ES2020) | ver Décima Primeira Edição - ECMAScript 2020 | Jordan HarbandKevin Smith |
| 12 | Junho de 2021 | ECMAScript 2021 (ES2021) | ver Décima Segunda Edição - ECMAScript 2021 | Jordan Harband, Shu-yu Guo, Michael Ficarra, Kevin Gibbons |
Em junho de 2004, a Ecma International publicou o padrão ECMA-357, definindo uma extensão do ECMAScript, conhecido como ECMAScript for XML (E4X). A Ecma também definiu um "Perfil Compacto" para ECMAScript (conhecido como ES-CP ou ECMA 327) projetado para dispositivos com recursos limitados, que foi retirado em 2015. [13]
Quarta Edição (abandonada)
A quarta edição proposta do ECMA-262 (ECMAScript 4 ou ES4) seria a primeira grande atualização do ECMAScript desde a terceira edição publicada em 1999. O lançamento das especificações (juntamente com as referências para a implementação) foi inicialmente agendado para outubro de 2009. e, de fato, uma introdução ao idioma foi lançada pelo grupo de trabalho em 23 de outubro de 2007. [14]
Em agosto de 2008, foi tomada a decisão de reduzir o tamanho da quarta edição do ECMAScript e fundi-la com o projeto ECMAScript Harmony. As notícias em discussão para o Harmony foram:
- Aulas
- um sistema de modularização
- anotação de tipo opcional e tipagem estática , provavelmente usando um sistema de tipo estrutural
- geradores e iteradores
- atribuição não estruturada
- tipos de dados algébricos
A intenção desses recursos era, em parte, facilitar o desenvolvimento de software complexo com grandes grupos de trabalho por trás dele e permitir a eliminação de alguns recursos dinâmicos da linguagem para melhorar o desempenho. Por exemplo, o Tamarin (a máquina virtual ActionScript desenvolvida e lançada de código aberto pela Adobe) vem com compilação just-in-time (JIT) .
Além da introdução de novas funcionalidades, na quarta edição foi proposta a correção de diversos bugs da edição anterior [15] [16] . Essas correções, portanto, encontraram seu lugar na quinta edição
O trabalho nesta edição começou após a conclusão das especificações da edição Compact Profile e continuou por aproximadamente 18 meses, onde o progresso foi lento na combinação das idéias do JavaScript 2 da Netscape com a implementação prática do JScript da Microsoft. Houve também vários debates que aconteceram publicamente em blogs entre Eich, que mais tarde se tornaria o CTO da Mozilla Foundation, e o funcionário da Microsoft Chris Wilson, responsável pela arquitetura do Internet Explorer. Wilson argumentou que as mudanças propostas para o novo padrão que não eram completamente compatíveis com versões anteriores da linguagem iriam "quebrar a web" [17] e que aqueles que se opuseram a ela foram marginalizados [18] . Eich respondeu chamando seu detrator de mentiroso e o desafiou pedindo publicamente para demonstrar exemplos específicos de incompatibilidade [19] .
Quinta Edição
Yahoo! , Microsoft , Google e outros dissidentes da quarta edição do ECMAScript formaram seu "subcomitê" para projetar uma atualização um pouco menos ambiciosa do ECMAScript 3, nomeando-o provisoriamente ECMAScript 3.1. Esta edição se concentraria em atualizações de segurança e biblioteca com foco na compatibilidade.
Após a discussão descrita acima, as equipes ES 3.1 e ES 4 concordaram com um compromisso: trabalhariam nas duas edições em paralelo e com as duas equipes coordenadas para garantir que o ES 3.1 permanecesse estritamente um subconjunto do ES 4 ( em semântica e sintaxe).
No entanto, diferentes filosofias de desenvolvimento repetidamente criaram incompatibilidades entre o trabalho das duas equipes e parecia claro que as equipes que discordavam do ECMAscript 4 nunca o implementariam. Cerca de um ano após o rompimento da visão de futuro da ECMAScript, no Comitê Técnico da Ecma 39 [20] , em julho de 2008, Brendan Eich anunciou que as duas equipes conseguiram chegar a um acordo sobre um caminho comum, essencialmente alinhado ao desenvolvimento do 3.1, posteriormente renomeado Quinta Edição.
Em abril de 2009 foi publicada a versão final da quinta edição e a versão final foi finalizada em dezembro [21] .
A revisão 5.1 foi publicada em junho de 2011 [22] .
Sexta Edição - ECMAScript 2015
A sexta edição, inicialmente conhecida como ECMAScript (ES6), mas posteriormente renomeada como ECMAScript 2015, ficou pronta em 2015 [23] . Esta edição trouxe importantes expansões de sintaxe projetadas para facilitar a escrita de aplicativos complexos, incluindo novas declarações de classe ( ) e módulos por meio de instruções e . Algumas outras novidades sintáticas foram o novo iterador , funções de seta ( ), geradores no estilo Python , palavras-chave para declarar variáveis com visibilidade local e declarar constantes, dados binários, arrays tipados, novas coleções (maps, sets e WeakMap), promessas , melhorias no números e matemática, reflexão , proxy e string de modelo . [24] [25]class Foo { ... }importexportfor ... of() => {...}letconst
Sétima Edição - ECMAScript 2016
A sétima edição, oficialmente ECMAScript 2016, foi lançada em junho de 2016 [26] . Os principais novos recursos incluem escopo de bloco para variáveis e funções, atribuições de variáveis não estruturadas, chamadas de cauda apropriadas, operador de expoente ( **) e palavras-chave await, asyncpara programação assíncrona.
[26] [27]
Oitava Edição - ECMAScript 2017
A oitava edição, oficialmente conhecida como ECMAScript 2017 [28] , foi concluída e publicada em junho de 2017. Os novos recursos propostos incluem simultaneidade e atomics, transferência binária zero copy, outras melhorias matemáticas, integração sintática com promessas, fluxos observáveis, SIMD, melhor metaprogramação com classes, sobrecargas de operadores e muito mais.
Nona Edição - ECMAScript 2018
A nona edição, conhecida como ECMAScript 2018, foi publicada em junho de 2018 [29] . Iterações assíncronas ( for await(i of var)) são introduzidas, Promises agora têm métodos then(), catch()(se falharem) e finally(), a sintaxe de propagação para parâmetros de função ( function pippo(foo, ...bar)). Novidades maciças dizem respeito ao uso de expressões regulares [30] .
Décima Edição - ECMAScript 2019
A décima edição, denominada ECMAScript 2019, foi lançada em junho de 2019 [31] . As principais novidades dizem respeito aos métodos Array.flatMap()[32] e Object.fromEntries()[33] [34] .
Décima Primeira Edição - ECMAScript 2020
A décima primeira edição, ou ECMAScript 2020, foi publicada em junho de 2020 [35] . Além das novas funções, esta versão introduz um tipo primitivo BigIntpara inteiros de tamanho arbitrário, o operador nulo de coalescência e o thisobjeto global.
BigInts são criados com o construtor BigIntou com a sintaxe 10n, onde o "n" é colocado após o literal do número. BigInts permitem a representação e manipulação de inteiros que vão além Number.MAX_SAFE_INTEGERde , enquanto os tipos Numbers são representados por um valor IEEE 754 de precisão dupla de 64 bits . As funções incorporadas Mathnão são compatíveis com BigInts; por exemplo, a exponenciação de BigInts deve ser feita com o operador **em vez de Math.pow.
o operador de coalescência nulo,, ??retorna o operando direito quando o operando esquerdo é nullou undefined. Isso contrasta com o operador ||, que retornaria "string"para todos os valores "falsy", como os representados abaixo.
Indefinido ?? "string" // -> "string" nulo ?? "cadeia" // "cadeia" falso?? "string" // -> falso NaN?? "string" // -> NaN
A concatenação opcional possibilita acessar propriedades aninhadas de um objeto sem ter um controle AND em cada nível.
Um exemplo é const zipcode = person?.address?.zipcode. Se alguma das propriedades não estiver presente, elas zipcodeserão undefined.
Décima Segunda Edição - ECMAScript 2021
A décima segunda edição, ou ECMAScript 2021, foi publicada em junho de 2021 [36] . Apresenta o método replaceAllpara strings; a nova combinação de promessas Promise.any, que executa o código assim que a primeira das promessas retorna um valor. Também introduziu AggregateError, um novo tipo de erro que permite que vários erros sejam representados de uma só vez. Novos operadores de atribuição lógica chegam : ??=,, &&=; cria uma referência a um objeto sem preservá-lo de ser limpo pelo coletor de lixo e , o que permite a execução de um retorno de chamada quando um objeto de destino é limpo pelo coletor de lixo; agora é possível usar separadores para números :.
||=WeakRefFinalizationRegistry1_000
Conformidade
Em 2010, a ECMA International iniciou o desenvolvimento de um teste para verificar a conformidade com o padrão ECMA 262 ECMAScript.
Chamado de Test262, esse teste é usado para entender como várias implementações de JavaScript estão em conformidade com a especificação. O teste contém milhares de testes individuais, um para cada requisito das várias normas.
O desenvolvimento do Test262 é confiado ao Comitê Técnico ECMA 39 (TC39). Google e Microsoft contribuíram significativamente para o desenvolvimento: ambos desenvolveram milhares de testes realizados pela suíte. Test262 consiste em38 014 teste. Os dados são atualizados até janeiro de 2020. [37] . As tabelas abaixo mostram a conformidade dos mecanismos JavaScript em aplicativos populares.
Navegador da Web
| Motor | Navegador | Observância | |||
|---|---|---|---|---|---|
| ES5 [38] | ES6 [39] | 2016+ [40] [41] | |||
| V8 | Microsoft Edge 80 | 100% | 98% | 100% | |
| Macaco aranha | Firefox 73 | 100% | 98% | 82% | |
| V8 | Google Chrome 80, Opera 67 | 100% | 98% | 100% | |
| JavaScriptCore (Nitro) | Safári 13 | 99% | 99% | 80% | |
Implementações do lado do servidor
| Motor | Servidor | Observância | |||
|---|---|---|---|---|---|
| ES5 [38] | ES6 [39] | 2016+ [40] [41] | |||
| V8 | Node.js 13.2 | 100% | 98% | noventa e dois% | |
Notas
- ^ Paul Krill, criador de JavaScript pondera passado, futuro | Developer World , em infoworld.com , InfoWorld, 23 de junho de 2008. Recuperado em 31 de outubro de 2013 .
- ^ Comunicado de imprensa , em wp.netscape.com , Web.archive.org. Recuperado em 31 de outubro de 2013 (arquivado do original em 16 de setembro de 2007) .
- ↑ Brendan's Roadmap Updates: Popularity , em weblogs.mozillazine.org (arquivado do original em 17 de maio de 2008) .
- ^ Comunicado de imprensa , em cgi.netscape.com , Web.archive.org. Recuperado em 31 de outubro de 2013 (arquivado do original em 3 de dezembro de 1998) .
- ^ Haverá um sufixo de arquivo sugerido para es4? , em mail.mozilla.org , 3 de outubro de 2006. Recuperado em 31 de outubro de 2013 (arquivado do original em 21 de junho de 2020) .
- ^ JScript VS JavaScript , em javascript.about.com , About.com, 25 de novembro de 2015.
- ^ ECMA-262, 2ª edição ( PDF ), em ecma-international.org . Recuperado em 15 de junho de 2022 .
- ^ ECMA-262, 2ª edição ( PDF ), em ecma-international.org . Recuperado em 15 de junho de 2022 .
- ^ ECMA-262, 3ª edição ECMAScript® 1999 Language Specification ( PDF ), em ecma-international.org . Recuperado em 15 de junho de 2022 .
- ^ Alterações no JavaScript, Parte 1: EcmaScript 5 , youtube.com , YouTube, 18 de maio de 2009. Recuperado em 31 de outubro de 2013 .
- ^ É oficial: ECMAScript 6 é aprovado | InfoWorld
- ^ Especificação de linguagem ECMAScript 2015 - ECMA-262 6ª edição
- ^ 2015-03-24 Notas da Reunião . ESDiscut. Consulte também Padrões retirados do Ecma . ECMA.
- ^ Proposta ECMAScript 4th Edition - Language Overview ( PDF ), em ecmascript.org , 23 de outubro de 2007 (arquivado do original em 13 de julho de 2010) .
- ^ John Resig, John Resig - Correções de bugs em JavaScript 2 , em ejohn.org . Recuperado em 31 de outubro de 2013 .
- ^ Compatibilidade entre ES3 e ES4 proposto ( PDF ), em ecmascript.org . Recuperado em 31 de outubro de 2013 (arquivado do original em 24 de julho de 2014) .
- ^ ECMAScript 3 and Beyond - IEBlog - Site Home - MSDN Blogs , em blogs.msdn.com , 30 de outubro de 2007. Recuperado em 31 de outubro de 2013 .
- ^ O que eu penso sobre ES4. - Albatroz! - Página inicial do site - Blogs do MSDN , em blogs.msdn.com , 31 de outubro de 2007. Recuperado em 31 de outubro de 2013 .
- ↑ Carta aberta a Chris Wilson , em brendaneich.com , Brendan Eich, 31 de outubro de 2007. Recuperado em 31 de outubro de 2013 (arquivado do original em 16 de setembro de 2011) .
- ^ Comitê técnico 39 de Ecma , em ecma-international.org . Recuperado em 7 de junho de 2022 .
- ^ ECMA-262, 5ª edição ECMAScript® 2009 Language Specification ( PDF ), em ecma-international.org . Recuperado em 14 de junho de 2022 .
- ^ ECMA-262, edição 5.1 ECMAScript® 2009 Language Specification ( PDF ), em ecma-international.org . Recuperado em 14 de junho de 2022 .
- ^ ECMA-262, 6ª edição, junho de 2015 ECMAScript® 2015 Language Specification , em ecma-international.org . Recuperado em 4 de junho de 2022 .
- ^ ( PT ) 5 Great Features in EcmaScript 6 (ES6 Harmony) - Wintellect , em Wintellect , 24 de março de 2014. Recuperado em 19 de março de 2018 (arquivado do original em 22 de julho de 2017) .
- ^ ( PT ) ECMAScript 6 (ES6): O que há de novo na próxima versão do JavaScript , na Smashing Magazine , 28 de outubro de 2015. Recuperado em 19 de março de 2018 .
- ^ a b Especificação de linguagem ECMAScript 2016 , em ecma-international.org , Ecma International , junho de 2016.
- ↑ Michael Saboff, ECMAScript 6 Proper Tail Calls in WebKit , no WebKit , 23 de maio de 2016. Recuperado em 11 de abril de 2019 .
- ^ ECMA-262, 8ª edição, junho de 2017 ECMAScript® 2017 Language Specification , em ecma-international.org . Recuperado em 4 de junho de 2022 .
- ^ ECMA-262, 9ª edição, junho de 2018 ECMAScript® 2018 Language Specification , em ecma-international.org . Recuperado em 2 de junho de 2022 .
- ^ O que há de novo no ES2018 - SitePoint
- ^ ECMA-262, 10ª edição, junho de 2019 ECMAScript® 2019 Language Specification , em ecma-international.org . Recuperado em 4 de junho de 2022 .
- ^ Padrão funcional: flatMap
- ^ Proposta ES: `Object.fromEntries()`
- ^ Especificação de linguagem ECMAScript® 2019
- ^ ECMA-262, 11ª edição, junho de 2020 ECMAScript® 2020 Language Specification , em ecma-international.org . Recuperado em 4 de junho de 2022 .
- ^ ECMA-262, 12ª edição, junho de 2021 ECMAScript® 2021 Language Specification , em ecma-international.org . Recuperado em 2 de junho de 2022 .
- ^ tc39 / test262 , no GitHub , 24 de janeiro de 2020. Recuperado em 29 de janeiro de 2020 .
- ^ a b Tabela de compatibilidade ECMAScript 5 , em kangax.github.io . Recuperado em 8 de novembro de 2018 .
- ^ a b Tabela de compatibilidade ECMAScript 6 , em kangax.github.io . Recuperado em 8 de novembro de 2018 .
- ^ a b Tabela de compatibilidade ECMAScript 2016+ , em kangax.github.io . Recuperado em 8 de novembro de 2018 .
- ^ a b Pontuação que inclui todos os testes de conformidade de ES2016 a ES2019
Ver mais
- ActionScript
- Comparação de mecanismos de layout (ECMAScript)
- Dart (linguagem de programação)
- Modelo de Objeto de Documento (DOM)
- ECMAScript para XML (E4X)
- JavaScript
- JScript
- Lista de mecanismos ECMAScript
- ( QML
- JavaScript do lado do servidor
- TypeScript
Links externos
- ( PT ) Site oficial - ECMAScript , em ecmascript.org . Recuperado em 1º de março de 2016 (arquivado do original em 18 de maio de 2016) .