Articles

ECMAScript (Português)

The ECMAScript specification is a standardized specification of a scripting language developed by Brendan Eich of Netscape; initially named Mocha, then LiveScript, and finally JavaScript. Em dezembro de 1995, Sun Microsystems e Netscape anunciaram JavaScript em um comunicado de imprensa. Em novembro de 1996, a Netscape anunciou uma reunião da Ecma International standards organization para promover a padronização da 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 linguístico 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 foi sempre um nome comercial indesejado que soa como uma doença de pele. ECMAScript has been formalized through operational semantics by work at Stanford University and the Department of Computing, Imperial College London for security analysis and standardization.,

JavaScript e JScript estão em conformidade com a especificação ECMAScript, ao mesmo tempo que fornecem características adicionais não descritas na especificação.

VersionsEdit

existem onze edições do ECMA-262 publicadas. O trabalho sobre a versão 11 da norma foi finalizado em junho de 2020.,

adiciona “strict mode”, um subconjunto destinado a fornecer uma verificação de erros mais completa e evitar construções propensas a erros. Clarifica muitas ambiguidades na especificação 3rd edition, e acomoda o comportamento de implementações do mundo real que diferem consistentemente daquela Especificação., Adiciona algumas características novas, como getters e setters, suporte de biblioteca para JSON, e reflexão mais completa sobre propriedades do objeto.

ECMAScript versão da história
Edição Data de publicação Nome Alterações da edição anterior Editor
1 de junho de 1997 Primeira edição Guy L. Steele Jr.,998 Editorial alterações para manter a especificação totalmente alinhado com a norma ISO/IEC 16262 padrão internacional Mike. Cowlishaw
3 de dezembro de 1999 Adicionado expressões regulares, melhor manipulação de cadeias de caracteres, controlo de novo instruções try/catch manipulação de exceção, maior definição de erros, formatação numérica de saída, e outras melhorias Mike. Cowlishaw
4 Abandonado (última versão de 30 de junho de 2003) Quarta Edição foi abandonado, devido a diferenças políticas relativas linguagem de complexidade., Muitos recursos propostos para a quarta edição foram completamente descartados; alguns foram incorporados à sexta edição.
5 dezembro 2009 Pratap Lakshman, Allen Wirfs-Brock
5.1 de junho de 2011 Esta edição 5.1 do padrão Ecma está totalmente alinhada com a terceira edição da norma internacional ISO/IEC 16262:2011., Veja 9ª Edição – ECMAScript 2018 Brian Terlson
10 de junho de 2019 ECMAScript 2019 (ES2019) Veja 10ª Edição – ECMAScript 2019 Brian Terlson, Bradley Farias, Jordan Harband
11 de junho de 2020 ECMAScript 2020 (ES2020) Veja 11ª Edição – ECMAScript 2020 Jordão Harband, Kevin Smith

Em junho de 2004, Ecma International publicou ECMA-357 padrão, a definição de uma extensão para ECMAScript, conhecido como ECMAScript para XML (E4X)., O Ecma também definiu um “perfil compacto” para o ECMAScript – conhecido como ES-CP, ou ECMA 327 – que foi projetado para dispositivos de restrição de recursos, que foi retirado em 2015.

4th Edition (abandoned)Edit

the proposed fourth edition of ECMA-262 (ECMAScript 4 or ES4) would have been the first major update to ECMAScript since the third edition was published in 1999. A especificação (juntamente com uma implementação de referência) foi originalmente orientada para a conclusão até outubro de 2008. O primeiro rascunho foi datado de fevereiro de 1999., Uma visão geral da linguagem foi lançada pelo grupo de trabalho em 23 de outubro de 2007.

By August 2008, The ECMAScript 4th edition proposal had been scaled back into a project codinome ECMAScript Harmony. Características em discussão para a harmonia na época incluíam:

  • classes,
  • um sistema de módulos, anotações de tipo opcional e tipagem estática, provavelmente usando um sistema de tipo estrutural, geradores e iteradores, atribuição de destruição e tipos de dados algébricos.,

a intenção destas características era, em parte, apoiar melhor a programação no grande, e permitir sacrificar alguma da capacidade do script para ser dinâmico para melhorar o desempenho. Por exemplo, Tamarin – a máquina virtual para ActionScript, desenvolvida e de fonte aberta pela Adobe-tem suporte de compilação just – in-time (JIT) para certas classes de scripts.

além de introduzir novas funcionalidades, alguns bugs ES3 foram propostos para serem corrigidos na edição 4. Estas correções e outras, e suporte para codificação/decodificação JSON, foram dobradas na especificação ECMAScript, 5ª edição.,

O trabalho começou na edição 4 Depois que a especificação ES-CP (Compact Profile) foi concluída, e continuou por aproximadamente 18 meses, onde o progresso lento foi feito equilibrando a teoria da especificação JavaScript 2 do 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 para XML (E4X). A atualização não foi sem controvérsia. No final de 2007, um debate entre Eich, mais tarde CTO da Fundação Mozilla, e Chris Wilson, arquiteto da plataforma da Microsoft para Internet Explorer, tornou-se público em uma série de blogs., Wilson advertiu que porque as alterações propostas para o ECMAScript tornou-o incompatível em alguns aspectos com versões anteriores da linguagem, a atualização foi “quebrar a Web”, e que as partes interessadas que se opuseram às alterações estavam sendo “ocultas da vista”. Eich respondeu afirmando que Wilson parecia estar “repetindo falsidades em blogs” e negou que havia uma tentativa de suprimir a dissidência e desafiou os críticos a dar exemplos específicos de incompatibilidade., He pointed out that Microsoft Silverlight and Adobe AIR rely on C# and ActionScript 3 respectively, both of which are larger and more complex than ECMAScript Edition 3.

5 EditionEdit

Yahoo, Microsoft, Google, e outros 4ª edição dissidentes formaram a sua própria subcomissão para projeto menos ambicioso atualização do ECMAScript 3, provisoriamente chamado ECMAScript 3.1. Esta edição focaria em atualizações de segurança e biblioteca, com grande ênfase na compatibilidade. Após o Citado sparring público, o ECMAScript 3.,1 e ECMAScript 4 equipes concordaram em um compromisso: as duas edições seriam trabalhadas, em paralelo, com a coordenação entre as equipes para garantir que ECMAScript 3.1 continua a ser um subconjunto estrito do ECMAScript 4 tanto na semântica quanto na sintaxe.

no entanto, as diferentes filosofias em cada equipa resultaram em repetidas quebras da Regra do subconjunto, e permaneceu duvidoso que os dissidentes ECMAScript 4 alguma vez apoiariam ou implementariam o ECMAScript 4 no futuro., Depois de mais de um ano desde que a discordância sobre o futuro do ECMAScript dentro do Ecma Comissão Técnica 39, as duas equipes chegaram a um novo compromisso em julho de 2008: Brendan Eich anunciou que Ecma TC39 gostaria de focar o trabalho no ECMAScript 3.1 (mais tarde renomeado para ECMAScript, 5ª Edição) projeto com a colaboração de todas as partes, e os vendedores de destino, pelo menos, duas implementações interoperáveis até o início de 2009. Em abril de 2009, a Ecma TC39 publicou o” draft final ” da 5ª edição e anunciou que o teste de implementações interoperáveis deveria estar concluído em meados de julho., Em 3 de dezembro de 2009, foi publicada a 5ª edição da ECMA-262.

6th Edition – ECMAScript 2015Edit

the 6th edition, initially known as ECMAScript 6 (ES6) then and later renamed to ECMAScript 2015, was finalized in June 2015. Esta atualização adiciona significativo nova sintaxe para a escrita de aplicações complexas, incluindo declarações de classe (class Foo { ... }), ES6 módulos, como import * as moduleName from "..."; export const Foo, mas define-las semanticamente nos mesmos termos como ECMAScript 5 de modo estrito., Outros novos recursos incluem os iteradores e for...of loops, Python-estilo de geradores, seta para a expressão de função (() => {...}), let palavra-chave para declarações local, const palavra-chave para a constante de declarações local, dados binários, typed arrays, coleções novas (mapas, cenários e WeakMap), promessas, número de matemática e aprimoramentos, de reflexão, de proxies (metaprogramming para objetos virtuais e wrappers) e modelo de literais cadeias de caracteres. A lista completa é extensa., Como a primeira especificação de “harmonia ECMAScript”, também é conhecida como “harmonia ES6″.”

7th Edition-ECMAScript 2016Edit

a 7th edition, oficialmente conhecida como ECMAScript 2016, foi finalizada em junho de 2016. Suas características incluem o bloco de definição de escopo de variáveis e funções, desestruturação dos padrões (de variáveis), própria cauda chamadas, operador de exponenciação ** para números, await async palavras-chave para programação assíncrona, e o Array.prototipo.inclui a função Código>.,

O operador de exponenciação é equivalente a Math.pow, but provides a simpler syntax similar to languages like Python, F#, Perl, and Ruby.async /esperam foi saudado como uma maneira mais fácil de usar promessas e desenvolver código assíncrono.

8th Edition – ECMAScript 2017Edit

a 8th edition, oficialmente conhecida como ECMAScript 2017, foi finalizada em junho de 2017. Suas características incluem o objeto .valores código>, objecto.,entries and Object.getOwnPropertyDescriptors functions for easy manipulation of Objects, async/await constructions which use generators and promises, and additional features for concurreency and atomics.

9th Edition – ECMAScript 2018Edit

a 9th edition, oficialmente conhecida como ECMAScript 2018, foi finalizada em junho de 2018. Novas características incluem operadores de repouso / espalhamento para literais de objetos (três pontos: ...identifier), iteração assíncrona, Promise.prototype.finally e adições ao RegExp.,

o operador de spread permite a cópia fácil das propriedades do objeto, como mostrado abaixo.

10th Edition – ECMAScript 2019Edit

a 10th edition, oficialmente conhecida como ECMAScript 2019, foi publicada em junho de 2019. Características adicionais incluem, mas não estão limitados a, Array.prototype.flat Array.prototype.flatMap, muda para Array.sort e Object.fromEntries.

Array.sort é agora garantido ser estável, o que significa que os elementos com a mesma precedência de ordenação irão aparecer na mesma ordem na matriz ordenada., Array.prototype.flat(depth=1) plana um array para uma profundidade especificada, significando que todos os elementos de subarray (até a profundidade especificada) são concatenados recursivamente.

11th Edition – ECMAScript 2020Edit

a 11th edition, oficialmente conhecida como ECMAScript 2020, foi publicada em junho de 2020. In addition to new functions, this version includes a BigInt primitive type for arbitrary-sized integers, the nullish coalescing operator, and the globalThis object.,

BigInts são criadas com BigInt construtor ou com a sintaxe 10n, onde “n” é colocado após o número literal. BigInts permitem a representação e manipulação de inteiros além de número.MAX_SAFE_INTEGER, while Numbers are represented by a double-precision 64-bit IEEE 754 value., As funções internas no Matemática não são compatíveis com BigInts; por exemplo, a potência de BigInts deve ser feito com o ** operador em vez de Matemática.pow código>.

O operador de carvão nullish, ??, retorna o seu lado direito quando operando do lado esquerdo é null ou indefinido., Isto contrasta com o operador ||, que retornaria “string” para todos os exemplos.

false ?? "string" // -> falseNaN ?? "string" // -> NaNundefined ?? "string" // -> "string"

chaining opcional permite-lhe aceder aos nós aninhados num objecto sem ter um e verificar a cada nível.

um exemplo é const zipcode = person?.morada?.zipcode. Se alguma das propriedades não estiver presente, zipcode será indefinido.

ES.NextEdit

ES.,Em seguida, um nome dinâmico que se refere a qualquer que seja a próxima versão no momento da escrita. ES.As próximas características são propostas acabadas (também conhecidas como” propostas da Fase 4″), Como listadas na proposta final que não fazem parte de uma especificação ratificada. O Comitê de linguagem segue um modelo “living spec”, então essas mudanças são parte do padrão, e a ratificação é uma formalidade.