ECMAScript - ECMAScript

ECMAScript
Paradigma Multi-paradigma : baseado em protótipo , funcional , imperativo
Projetado por Brendan Eich , Ecma International
Apareceu pela primeira vez 1997 ; 24 anos atrás ( 1997 )
Disciplina de digitação fraco , dinâmico
Local na rede Internet www .ecma-international .org
Implementações principais
JavaScript , SpiderMonkey , V8 , ActionScript , JScript , QtScript , InScript , Google Apps Script
Influenciado por
Self , HyperTalk , AWK , C , CoffeeScript , Perl , Python , Java , Scheme
ECMAScript (formato de arquivo)
Crystal source.png
Extensões de nome de arquivo
.es
Tipo de mídia da Internet
aplicação / ecmascript
Desenvolvido por Sun Microsystems ,
Ecma International
lançamento inicial Junho de 1997 ; 24 anos atrás ( 1997-06 )
Último lançamento
Edição 12
(junho de 2021 ; 2 meses atrás ) ( 2021-06 )
Tipo de formato Linguagem de script
Local na rede Internet ECMA-262 , ECMA-290 ,
ECMA-327 , ECMA-357 ,
ECMA-402

ECMAScript ( / ɛ k m ə s k r ɪ p t / ) (ou ES ) é uma linguagem de programação de finalidade geral , normalizado por ECMA Internacional de acordo com o documento ECMA-262 . É um padrão JavaScript destinado a garantir a interoperabilidade de páginas da web em diferentes navegadores da web . ECMAScript é comumente usado para scripting do lado do cliente na World Wide Web , e é cada vez mais sendo usado para escrever aplicativos de servidor e serviços usando Node.js .

ECMAScript, ECMA-262 e JavaScript

ECMA-262 ou a Especificação de linguagem ECMAScript define a linguagem ECMAScript ou apenas ECMAScript (também conhecido como JavaScript ). ECMA-262 especifica apenas a sintaxe de linguagem e semântica da API principal , como Array , Function e globalThis , enquanto implementações válidas de JavaScript adicionam sua própria funcionalidade como entrada / saída ou manipulação de sistema de arquivos.

História

A especificação ECMAScript é uma especificação padronizada de uma linguagem de script desenvolvida por Brendan Eich da Netscape ; inicialmente denominado Mocha, em seguida, LiveScript e, finalmente, JavaScript. Em dezembro de 1995, a Sun Microsystems e a Netscape anunciaram o JavaScript em um comunicado à imprensa. Em novembro de 1996, a Netscape anunciou uma reunião da organização de padrões Ecma International para promover a padronização do JavaScript. A primeira edição do ECMA-262 foi adotada pela Assembleia Geral da Ecma em junho de 1997. Várias edições do padrão de linguagem foram publicadas desde então. O nome "ECMAScript" foi um compromisso entre as organizações envolvidas na padronização da linguagem, especialmente Netscape e Microsoft, cujas disputas dominaram as primeiras sessões de padrões. Eich comentou que "ECMAScript sempre foi um nome comercial indesejado que soa como uma doença de pele ." ECMAScript foi formalizado através de semântica operacional de trabalho em Universidade de Stanford e do Departamento de Computação , Imperial College London para análise de segurança e padronização.

Versões

Existem onze edições da ECMA-262 publicadas. O trabalho na versão 12 do padrão foi finalizado em junho de 2021.

Histórico da versão ECMAScript
Edição Data de publicação Nome Alterações da edição anterior editor
1 Junho de 1997 Primeira edição Guy L. Steele Jr.
2 Junho de 1998 Mudanças editoriais para manter a especificação totalmente alinhada com o padrão internacional ISO / IEC 16262 Mike Cowlishaw
3 Dezembro de 1999 Adicionadas expressões regulares , melhor tratamento de string, novas instruções de controle, tratamento de exceção try / catch, definição mais precisa de erros, formatação para saída numérica e outras melhorias Mike Cowlishaw
4 Abandonado (último rascunho de 30 de junho de 2003) A Quarta Edição foi abandonada devido a diferenças políticas em relação à complexidade da linguagem. Muitos recursos propostos para a Quarta Edição foram completamente eliminados; alguns foram incorporados à sexta edição.
5 Dezembro de 2009 Adiciona "modo estrito", um subconjunto destinado a fornecer uma verificação de erros mais completa e evitar construções propensas a erros. Esclarece muitas ambigüidades na especificação da 3ª edição e acomoda o comportamento de implementações do mundo real que diferiam consistentemente daquela especificação. Adiciona alguns novos recursos, como getters e setters, suporte de biblioteca para JSON e uma reflexão mais completa sobre as propriedades do objeto. Pratap Lakshman, Allen Wirfs-Brock
5,1 Junho de 2011 Esta edição 5.1 do padrão ECMAScript está totalmente alinhada com a terceira edição do padrão internacional ISO / IEC 16262: 2011. Pratap Lakshman, Allen Wirfs-Brock
6 Junho de 2015 ECMAScript 2015 (ES2015) Ver 6ª Edição - ECMAScript 2015 Allen Wirfs-Brock
7 Junho de 2016 ECMAScript 2016 (ES2016) Ver 7ª Edição - ECMAScript 2016 Brian Terlson
8 Junho de 2017 ECMAScript 2017 (ES2017) Ver 8ª Edição - ECMAScript 2017 Brian Terlson
9 Junho de 2018 ECMAScript 2018 (ES2018) Ver 9ª Edição - ECMAScript 2018 Brian Terlson
10 Junho de 2019 ECMAScript 2019 (ES2019) Ver 10ª Edição - ECMAScript 2019 Brian Terlson, Bradley Farias, Jordan Harband
11 Junho de 2020 ECMAScript 2020 (ES2020) Veja 11ª Edição - ECMAScript 2020 Jordan Harband, Kevin Smith
12 Junho de 2021 ECMAScript 2021 (ES2021) Ver 12ª 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 para ECMAScript, conhecido como ECMAScript para XML (E4X). A Ecma também definiu um "Perfil Compacto" para ECMAScript - conhecido como ES-CP, ou ECMA 327 - que foi projetado para dispositivos com recursos limitados, que foi retirado em 2015.

4ª edição (abandonada)

A quarta edição proposta do ECMA-262 ( ECMAScript 4 ou ES4 ) teria sido a primeira grande atualização do ECMAScript desde que a terceira edição foi publicada em 1999. A especificação (junto com uma implementação de referência) foi originalmente planejada para ser concluída em outubro de 2008. O primeiro rascunho foi datado de fevereiro de 1999. Uma visão geral da linguagem foi divulgada pelo grupo de trabalho em 23 de outubro de 2007.

Em agosto de 2008, a proposta da 4a edição do ECMAScript foi reduzida a um código de projeto denominado ECMAScript Harmony . Os recursos em discussão para o Harmony na época incluíam:

A intenção desses recursos era, em parte, oferecer melhor suporte à programação em geral e permitir o sacrifício de parte da capacidade do script de ser dinâmico para melhorar o desempenho. Por exemplo, Tamarin - a máquina virtual para ActionScript, desenvolvida e open-source pela Adobe - tem suporte de compilação just-in-time (JIT) para certas classes de scripts.

Além de introduzir novos recursos, alguns bugs ES3 foram propostos para serem corrigidos na edição 4. Essas correções e outras, e o suporte para codificação / decodificação JSON , foram incorporados à especificação ECMAScript, 5ª edição.

O trabalho começou na Edição 4 depois que a especificação ES-CP (Perfil Compacto) foi concluída e continuou por aproximadamente 18 meses, onde um progresso lento foi feito equilibrando a teoria da especificação JavaScript 2 da Netscape com a experiência de implementação do JScript .NET da Microsoft. Depois de algum tempo, o foco mudou para o padrão ECMAScript for XML (E4X). A atualização gerou polêmica. No final de 2007, um debate entre Eich, mais tarde o CTO da Mozilla Foundation , e Chris Wilson , o arquiteto da plataforma da Microsoft para o Internet Explorer , tornou-se público em vários blogs . Wilson advertiu que, como as alterações propostas ao ECMAScript o tornaram incompatível com versões anteriores em alguns aspectos, a atualização resultou em "quebrar a Web" e que as partes interessadas que se opuseram às alterações foram "ocultadas da vista". Eich respondeu afirmando que Wilson parecia estar "repetindo falsidades em blogs" e negou que houvesse uma tentativa de suprimir a dissidência e desafiou os críticos a dar exemplos específicos de incompatibilidade. Ele destacou que o Microsoft Silverlight e o Adobe AIR dependem do C # e do ActionScript 3 respectivamente, ambos maiores e mais complexos do que o ECMAScript Edition 3.

5ª Edição

Yahoo, Microsoft, Google e outros dissidentes da 4ª edição formaram seu próprio subcomitê para projetar uma atualização menos ambiciosa do ECMAScript 3, provisoriamente denominada ECMAScript 3.1. Esta edição se concentraria em atualizações de segurança e biblioteca, com grande ênfase na compatibilidade. Após o sparring público mencionado acima, as equipes ECMAScript 3.1 e ECMAScript 4 concordaram em um compromisso: as duas edições seriam trabalhadas, em paralelo, com coordenação entre as equipes para garantir que ECMAScript 3.1 permaneça um subconjunto estrito de ECMAScript 4 em semântica e sintaxe.

No entanto, as diferentes filosofias em cada equipe resultaram em quebras repetidas da regra do subconjunto, e permaneceu duvidoso que os dissidentes do ECMAScript 4 algum dia apoiariam ou implementariam o ECMAScript 4 no futuro. Depois de mais de um ano desde a divergência sobre o futuro do ECMAScript dentro do Comitê Técnico 39 da Ecma, as duas equipes chegaram a um novo compromisso em julho de 2008: Brendan Eich anunciou que o Ecma TC39 se concentraria no trabalho no ECMAScript 3.1 (posteriormente renomeado para ECMAScript, 5º Edition) com total colaboração de todas as partes, e os fornecedores visariam a pelo menos duas implementações interoperáveis ​​até o início de 2009. Em abril de 2009, Ecma TC39 publicou o rascunho "final" da 5ª edição e anunciou que o teste de implementações interoperáveis ​​era esperado. concluído em meados de julho. Em 3 de dezembro de 2009, ECMA-262 5ª edição foi publicada.

6ª Edição - ECMAScript 2015

A 6ª edição, ECMAScript 6 ( ES6 ) e posteriormente renomeado para ECMAScript 2015, foi finalizada em junho de 2015. Esta atualização adiciona uma nova sintaxe significativa para escrever aplicativos complexos, incluindo declarações de classe ( ), módulos ES6 como , mas os define semanticamente da mesma forma termos como modo estrito ECMAScript 5. Outros novos recursos incluem iteradores e loops, geradores no estilo Python , expressão de função de seta ( ), palavra-chave para declarações locais, palavra-chave para declarações locais constantes, dados binários, matrizes digitadas, novas coleções (mapas, conjuntos e WeakMap), promessas , número e aprimoramentos matemáticos, reflexão, proxies (metaprogramação para objetos virtuais e wrappers) e literais de modelo para strings. A lista completa é extensa. Como a primeira especificação "ECMAScript Harmony", também é conhecida como "ES6 Harmony". class Foo { ... }import * as moduleName from "..."; export const Foofor...of() => {...}letconst

7ª Edição - ECMAScript 2016

A 7ª edição, ou ECMAScript 2016, foi finalizada em junho de 2016. Seus recursos incluem escopo de bloco de variáveis ​​e funções, padrões de desestruturação (de variáveis), chamadas finais adequadas, operador de exponenciação **para números await, asyncpalavras-chave para programação assíncrona (como preparação para ES2017) e a Array.prototype.includesfunção.

O operador de exponenciação é equivalente a Math.pow, mas fornece uma sintaxe mais simples semelhante a linguagens como Python, F #, Perl e Ruby. async/ awaitfoi saudado como uma maneira mais fácil de usar promessas e desenvolver código assíncrono.

8ª Edição - ECMAScript 2017

A 8ª edição, ou ECMAScript 2017, foi finalizado em junho de 2017. Suas características incluem os Object.values, Object.entriese Object.getOwnPropertyDescriptorsfunções para facilitar a manipulação de objetos, async/awaitconstruções que geradores de uso e promessas, e recursos adicionais para a simultaneidade e atomics .

9ª Edição - ECMAScript 2018

A 9ª edição, ou ECMAScript 2018, foi finalizada em junho de 2018. Os novos recursos incluem o operador de propagação, parâmetros de descanso, iteração assíncrona Promise.prototype.finallye acréscimos ao RegExp.

O operador de propagação permite a cópia fácil das propriedades do objeto, conforme mostrado abaixo.

let object = {a: 1, b: 2}

let objectClone = Object.assign({}, object) // before ES9
let objectClone = {...object} // ES9 syntax

let otherObject = {c: 3, ...object}
console.log(otherObject) // -> {c: 3, a: 1, b: 2}

10ª Edição - ECMAScript 2019

A edição de 10, ou ECMAScript 2019, foi publicado em junho de 2019. As características adicionadas incluem, mas não estão limitados a, Array.prototype.flat, Array.prototype.flatMap, muda para Array.sorte Object.fromEntries.

Array.sortagora tem a garantia de ser estável, o que significa que os elementos com a mesma precedência de classificação aparecerão na mesma ordem na matriz classificada. Array.prototype.flat(depth=1)nivela uma matriz para uma profundidade especificada, o que significa que todos os elementos de subarray (até a profundidade especificada) são concatenados recursivamente.

11ª Edição - ECMAScript 2020

A 11ª edição, ou ECMAScript 2020, foi publicada em junho de 2020. Além de novas funções, esta versão apresenta um BigInttipo primitivo para inteiros de tamanho arbitrário, o operador coalescente nulo e o objeto globalThis .

BigInts são criados com o BigIntconstrutor ou com a sintaxe 10n, onde "n" é colocado após o literal numérico. BigInts permitem a representação e manipulação de inteiros além Number.MAX_SAFE_INTEGER, enquanto os números são representados por um valor IEEE 754 de 64 bits de precisão dupla . As funções integradas em 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 nula ??, retorna seu operando do lado direito quando o lado esquerdo é nullou undefined. Isso contrasta com o ||operador, que retornaria "string"para todos os valores "falsos", como os abaixo.

undefined ?? "string" // -> "string"
null ?? "string" // -> "string"
false ?? "string" // -> false
NaN ?? "string" // -> NaN

O encadeamento opcional torna possível acessar as propriedades aninhadas de um objeto sem ter uma verificação AND em cada nível.

Um exemplo é const zipcode = person?.address?.zipcode. Se alguma das propriedades não estiver presente, zipcodeestará undefined.

12ª Edição - ECMAScript 2021

A 12ª edição, ou ECMAScript 2021, foi publicada em junho de 2021. Esta versão apresenta o replaceAllmétodo para strings; Promise.any, um combinador de promessa que entra em curto-circuito quando um valor de entrada é cumprido; AggregateError, um novo tipo de erro para representar vários erros de uma vez; operadores de atribuição lógica ( ??=, &&=, ||=); WeakRef, para se referir a um objeto de destino sem preservá-lo da coleta de lixo e FinalizationRegistry, para gerenciar o registro e cancelamento de registro de operações de limpeza executadas quando os objetos de destino são coletados como lixo; separadores para literais numéricos ( 1_000); e Array.prototype.sortficou mais preciso, reduzindo a quantidade de casos que resultam em uma ordem de classificação definida pela implementação.

ES.Next

ES.Next é um nome dinâmico que se refere a qualquer que seja a próxima versão no momento da escrita. Os recursos do ES.Next incluem propostas concluídas (também conhecidas como "propostas do estágio 4") conforme listado nas propostas concluídas que não fazem parte de uma especificação ratificada. O comitê de idioma segue um modelo de "especificação viva", então essas mudanças são parte do padrão e a ratificação é uma formalidade.

Recursos

A linguagem ECMAScript inclui recursos estruturados , dinâmicos , funcionais e baseados em protótipo .

Imperativo e estruturado

ECMAScript JavaScript suporta programação estruturada de estilo C. Anteriormente, o JavaScript suportava apenas escopo de função usando a palavra-chave var, mas ECMAScript 2015 adicionou as palavras-chave lete constpermitindo que o JavaScript suportasse escopo de bloco e escopo de função. JavaScript oferece suporte à inserção automática de ponto-e-vírgula , o que significa que pontos-e-vírgulas normalmente usados ​​para encerrar uma instrução em C podem ser omitidos em JavaScript.

Como línguas de estilo C, fluxo de controle é feito com os while, for, do/while, if/else, e switchdeclarações. As funções são mal digitadas e podem aceitar e retornar qualquer tipo. Argumentos não fornecidos como padrão undefined.

Fracamente digitado

ECMAScript é mal digitado . Isso significa que certos tipos são atribuídos implicitamente com base na operação que está sendo executada. No entanto, existem várias peculiaridades na implementação do JavaScript da conversão de uma variável de um tipo para outro. Essas peculiaridades foram o assunto de uma palestra intitulada Wat .

Dinâmico

ECMAScript é digitado dinamicamente. Portanto, um tipo é associado a um valor em vez de uma expressão. ECMAScript oferece suporte a várias maneiras de testar o tipo de objetos, incluindo a digitação de pato .

Transpilar

Desde o ES 2015, a tradução de JavaScript se tornou muito comum. A transpilação é uma compilação de fonte para fonte na qual versões mais novas de JavaScript são usadas e um transpiler reescreve o código-fonte para que seja compatível com navegadores mais antigos. Normalmente, os transpiladores transpilam para o ES3 para manter a compatibilidade com todas as versões de navegadores. As configurações para transpilar para uma versão específica podem ser definidas de acordo com a necessidade. A transpilação adiciona uma etapa extra ao processo de construção e às vezes é feita para evitar a necessidade de polyfills . Polyfills cria novos recursos para ambientes mais antigos que não os possuem. Polyfills faz isso em tempo de execução no interpretador, como o navegador do usuário ou no servidor. Em vez disso, a transpilação reescreve o próprio código ECMA durante a fase de construção de desenvolvimento antes de chegar ao interpretador.

Conformidade

Em 2010, a Ecma International começou a desenvolver um teste de padrões para o Ecma 262 ECMAScript. Test262 é um conjunto de testes de conformidade ECMAScript que pode ser usado para verificar se uma implementação de JavaScript segue a especificação ECMAScript. O conjunto de testes contém milhares de testes individuais, cada um dos quais testa alguns requisitos específicos da especificação ECMAScript. O desenvolvimento do Test262 é um projeto do Comitê Técnico 39 da Ecma (TC39). A estrutura de teste e os testes individuais são criados por organizações membros do TC39 e contribuídos para o Ecma para uso no Test262.

Contribuições importantes foram feitas pelo Google (Sputnik testsuite) e pela Microsoft, que contribuíram com milhares de testes. A suíte de teste Test262 consistia em38 014 testes em janeiro de 2020. As especificações ECMAScript por meio do ES7 são bem suportadas nos principais navegadores da web . A tabela abaixo mostra a taxa de conformidade para as versões atuais do software em relação às edições mais recentes do ECMAScript.

Conformidade do mecanismo de script
Motor de script Aplicativos de referência Conformidade
ES5 ES6 (2015) ES7 (2016) Mais recente (2017+)
Chakra Microsoft Edge 18 100% 96% 100% 33%
Macaco aranha Firefox 79 100% 98% 100% 100%
V8 Google Chrome 84, Microsoft Edge 84, Opera 70 100% 98% 100% 100%
JavaScriptCore Safari 13.1 99% 99% 100% 84%

Veja também

Referências

links externos

Padrões ISO

Padrões ECMA