ECMAScript - ECMAScript

ECMAScript
Paradigme Multi-paradigme : prototype-baseret , funktionel , imperativ
Designet af Brendan Eich , Ecma International
Første gang dukkede op 1997 ; 24 år siden ( 1997 )
Skrive disciplin svag , dynamisk
Internet side www .ecma-international .org
Store implementeringer
JavaScript , SpiderMonkey , V8 , ActionScript , JScript , QtScript , InScript , Google Apps Script
Påvirket af
Self , HyperTalk , AWK , C , CoffeeScript , Perl , Python , Java , Scheme
ECMAScript (filformat)
Crystal source.png
Filnavn udvidelser
.es
Internetmedietype
ansøgning/ecmascript
Udviklet af Sun Microsystems ,
Ecma International
Første udgivelse Juni 1997 ; 24 år siden ( 1997-06 )
Seneste udgivelse
Udgave 12
(juni 2021 ; 2 måneder siden ) ( 2021-06 )
Type format Scriptsprog
Internet side ECMA-262 , ECMA-290 ,
ECMA-327 , ECMA-357 ,
ECMA-402

ECMAScript ( / ɛ k m ə s k r ɪ p t / ) (eller ES ) er et generelt formål programmeringssprog , standardiseret af Ecma International ifølge dokumentet ECMA-262 . Det er en JavaScript -standard beregnet til at sikre interoperabilitet mellem websider på tværs af forskellige webbrowsere . ECMAScript er almindeligt anvendt til klient-side scriptingWorld Wide Web , og det anvendes i stigende grad til at skrive server applikationer og tjenester ved hjælp node.js .

ECMAScript, ECMA-262 og JavaScript

ECMA-262 eller ECMAScript Language Specification definerer ECMAScript-sproget , eller bare ECMAScript (også kaldet JavaScript ). ECMA-262 specificerer kun sprogsyntaks og semantik i kernens API , f.eks. Array , Function og globalThis , mens gyldige implementeringer af JavaScript tilføjer deres egen funktionalitet som input/output eller filsystemhåndtering.

Historie

ECMAScript -specifikationen er en standardiseret specifikation af et scriptsprog udviklet af Brendan Eich fra Netscape ; oprindeligt navngivet Mocha, derefter LiveScript og til sidst JavaScript. I december 1995 annoncerede Sun Microsystems og Netscape JavaScript i en pressemeddelelse. I november 1996 annoncerede Netscape et møde i Ecma International standardorganisation for at fremme standardiseringen af ​​JavaScript. Den første udgave af ECMA-262 blev vedtaget af Ecma Generalforsamling i juni 1997. Siden er flere udgaver af sprogstandarden blevet udgivet. Navnet "ECMAScript" var et kompromis mellem de organisationer, der var involveret i at standardisere sproget, især Netscape og Microsoft, hvis tvister dominerede de tidlige standardsessioner. Eich kommenterede, at "ECMAScript altid var et uønsket handelsnavn, der lyder som en hudsygdom ." ECMAScript er blevet formaliseret gennem operativ semantik af arbejde ved Stanford University og Department of Computing , Imperial College London til sikkerhedsanalyse og standardisering.

Versioner

Der er elleve udgaver af ECMA-262 udgivet. Arbejdet med version 12 af standarden blev afsluttet i juni 2021.

ECMAScript -versionshistorik
Udgave Dato offentliggjort Navn Ændringer fra tidligere udgave Redaktør
1 Juni 1997 Første udgave Guy L. Steele Jr.
2 Juni 1998 Redaktionelle ændringer for at holde specifikationen fuldt ud i overensstemmelse med ISO/IEC 16262 internationale standard Mike Cowlishaw
3 December 1999 Tilføjet regulære udtryk , bedre strenghåndtering, nye kontrolerklæringer, prøv/fang undtagelseshåndtering, strammere definition af fejl, formatering til numerisk output og andre forbedringer Mike Cowlishaw
4 Forladt (sidste udkast 30. juni 2003) Fjerde udgave blev opgivet på grund af politiske forskelle vedrørende sprogkompleksitet. Mange funktioner foreslået til den fjerde udgave er helt droppet; nogle blev indarbejdet i den sjette udgave.
5 December 2009 Tilføjer "streng tilstand", et undersæt, der skal give en mere grundig fejlkontrol og undgå fejludsatte konstruktioner. Tydeliggør mange uklarheder i 3. udgavespecifikationen og tilgodeser adfærd for virkelige implementeringer, der konsekvent adskilte sig fra denne specifikation. Tilføjer nogle nye funktioner, såsom getters og setters, bibliotekssupport til JSON og mere komplet refleksion over objektegenskaber. Pratap Lakshman, Allen Wirfs-Brock
5.1 Juni 2011 Denne udgave 5.1 af ECMAScript -standarden er fuldt ud tilpasset den tredje udgave af den internationale standard ISO/IEC 16262: 2011. Pratap Lakshman, Allen Wirfs-Brock
6 Juni 2015 ECMAScript 2015 (ES2015) Se 6. udgave - ECMAScript 2015 Allen Wirfs-Brock
7 Juni 2016 ECMAScript 2016 (ES2016) Se 7. udgave - ECMAScript 2016 Brian Terlson
8 Juni 2017 ECMAScript 2017 (ES2017) Se 8. udgave - ECMAScript 2017 Brian Terlson
9 Juni 2018 ECMAScript 2018 (ES2018) Se 9. udgave - ECMAScript 2018 Brian Terlson
10 Juni 2019 ECMAScript 2019 (ES2019) Se 10. udgave - ECMAScript 2019 Brian Terlson, Bradley Farias, Jordan Harband
11 Juni 2020 ECMAScript 2020 (ES2020) Se 11. udgave - ECMAScript 2020 Jordan Harband, Kevin Smith
12 Juni 2021 ECMAScript 2021 (ES2021) Se 12. udgave - ECMAScript 2021 Jordan Harband, Shu-yu Guo, Michael Ficarra, Kevin Gibbons

I juni 2004 offentliggjorde Ecma International ECMA-357-standarden, der definerede en udvidelse til ECMAScript, kendt som ECMAScript for XML (E4X). Ecma definerede også en "kompakt profil" til ECMAScript-kendt som ES-CP eller ECMA 327-der var designet til ressourcebegrænsede enheder, som blev trukket tilbage i 2015.

4. udgave (opgivet)

Den foreslåede fjerde udgave af ECMA-262 ( ECMAScript 4 eller ES4 ) ville have været den første store opdatering til ECMAScript siden den tredje udgave blev offentliggjort i 1999. Specifikationen (sammen med en referenceimplementering) var oprindeligt målrettet færdig i oktober 2008. Det første udkast var dateret februar 1999. Arbejdsgruppen offentliggjorde en oversigt over sproget den 23. oktober 2007.

I august 2008 var forslaget til ECMAScript 4. udgave blevet skaleret tilbage til en projektkode ved navn ECMAScript Harmony . Funktioner under diskussion for Harmony på det tidspunkt omfattede:

Hensigten med disse funktioner var dels at bedre understøtte programmering i det store og at tillade at ofre noget af scriptets evne til at være dynamisk for at forbedre ydeevnen. For eksempel har Tamarin -den virtuelle maskine til ActionScript, udviklet og open-source af Adobe - understøttelse af just-in-time compilation (JIT) til visse klasser af scripts.

Ud over at introducere nye funktioner blev nogle ES3 -fejl foreslået at blive rettet i udgave 4. Disse rettelser og andre, og understøttelse af JSON -kodning/dekodning, er blevet foldet ind i ECMAScript, 5. udgave -specifikationen.

Arbejdet startede med udgave 4, efter at ES-CP (Compact Profile) -specifikationen var afsluttet og fortsatte i cirka 18 måneder, hvor der blev gjort langsomme fremskridt, der balancerede teorien om Netscapes JavaScript 2-specifikation med implementeringsoplevelsen af ​​Microsofts JScript .NET. Efter noget tid flyttede fokus til ECMAScript for XML (E4X) standarden. Opdateringen har ikke været uden kontroverser. I slutningen af ​​2007 blev en debat mellem Eich, senere Mozilla Fondens CTO og Chris Wilson , Microsofts platformarkitekt for Internet Explorer , offentliggjort på en række blogs . Wilson advarede om, at fordi de foreslåede ændringer af ECMAScript gjorde det bagud uforeneligt i nogle henseender til tidligere versioner af sproget, svarede opdateringen til "at bryde internettet", og at interessenter, der modsatte sig ændringerne, blev "skjult for synet". Eich reagerede med at erklære, at Wilson syntes at være "at gentage usandheder i blogs" og benægtede, at der var forsøg på at undertrykke uenighed og udfordrede kritikere til at give specifikke eksempler på uforenelighed. Han påpegede, at Microsoft Silverlight og Adobe AIR er afhængige af henholdsvis C# og ActionScript 3, som begge er større og mere komplekse end ECMAScript Edition 3.

5. udgave

Yahoo, Microsoft, Google og andre dissidenter i 4. udgave dannede deres eget underudvalg for at designe en mindre ambitiøs opdatering af ECMAScript 3, der foreløbigt hedder ECMAScript 3.1. Denne udgave fokuserer på sikkerheds- og biblioteksopdateringer med stor vægt på kompatibilitet. Efter den førnævnte offentlige sparring blev ECMAScript 3.1 og ECMAScript 4 -holdene enige om et kompromis: de to udgaver ville blive arbejdet parallelt med koordinering mellem holdene for at sikre, at ECMAScript 3.1 fortsat er en streng delmængde af ECMAScript 4 i både semantik og syntaks.

Imidlertid resulterede de forskellige filosofier i hvert hold i gentagne brud på delmængdereglen, og det forblev tvivlsomt, at ECMAScript 4 -dissensenterne nogensinde ville støtte eller implementere ECMAScript 4 i fremtiden. Efter over et år siden uenigheden om ECMAScripts fremtid inden for Ecma Technical Committee 39, nåede de to hold til et nyt kompromis i juli 2008: Brendan Eich meddelte, at Ecma TC39 ville fokusere arbejdet på ECMAScript 3.1 (senere omdøbt til ECMAScript, 5. Edition) -projekt med fuldt samarbejde fra alle parter, og leverandører ville målrette mod mindst to interoperable implementeringer i begyndelsen af ​​2009. I april 2009 offentliggjorde Ecma TC39 det "sidste" udkast til 5. udgave og meddelte, at test af interoperable implementeringer forventedes at blive afsluttet medio juli. Den 3. december 2009 udkom ECMA-262 5. udgave.

6. udgave - ECMAScript 2015

Den 6. udgave, ECMAScript 6 ( ES6 ) og senere omdøbt til ECMAScript 2015, blev afsluttet i juni 2015. Denne opdatering tilføjer betydelig ny syntaks til at skrive komplekse applikationer, herunder klasseerklæringer ( ), ES6 -moduler som , men definerer dem semantisk i samme vilkår som ECMAScript 5 streng tilstand. Andre nye funktioner omfatter iteratorer og sløjfer, generatorer i Python -stil, pilefunktionsudtryk ( ), søgeord til lokale deklarationer, søgeord til konstante lokale deklarationer, binære data, typede arrays, nye samlinger (kort, sæt og WeakMap), løfter , antal og matematiske forbedringer, refleksion, proxyer (metaprogrammering til virtuelle objekter og indpakninger) og skabelonbokstaver til strenge. Den komplette liste er omfattende. Som den første "ECMAScript Harmony" -specifikation er den også kendt som "ES6 Harmony". class Foo { ... }import * as moduleName from "..."; export const Foofor...of() => {...}letconst

7. udgave - ECMAScript 2016

Den 7. udgave, eller ECMAScript 2016, blev afsluttet i juni 2016. Dens funktioner omfatter blok-scoping af variabler og funktioner, destruktionsmønstre (af variabler), korrekte haleopkald, eksponentieringsoperatør **for tal await, asyncnøgleord til asynkron programmering (som forberedelse for ES2017) og Array.prototype.includesfunktionen.

Eksponentieringsoperatoren svarer til Math.pow, men giver en enklere syntaks, der ligner sprog som Python, F#, Perl og Ruby. async/ awaitblev hyldet som en lettere måde at bruge løfter på og udvikle asynkron kode.

8. udgave - ECMAScript 2017

Den 8. udgave, eller ECMAScript 2017 blev afsluttet i juni 2017. Dens funktioner omfatter de Object.values, Object.entriesog Object.getOwnPropertyDescriptorsfunktioner til let manipulation af objekter, async/awaitkonstruktioner som bruger generatorer og løfter, og yderligere funktioner til concurrency og Atomics .

9. udgave - ECMAScript 2018

Den 9. udgave, eller ECMAScript 2018, blev afsluttet i juni 2018. Nye funktioner omfatter spredningsoperatoren, hvileparametre, asynkron iteration Promise.prototype.finallyog tilføjelser til RegExp.

Spredningsoperatoren giver mulighed for let kopiering af objektegenskaber, som vist nedenfor.

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. udgave - ECMAScript 2019

Den 10. udgave, eller ECMAScript 2019 blev offentliggjort i juni 2019. Tilføjet funktioner omfatter, men er ikke begrænset til, Array.prototype.flat, Array.prototype.flatMap, skifter til Array.sortog Object.fromEntries.

Array.sorter nu garanteret stabil, hvilket betyder, at elementer med samme sorteringsprioritet vises i samme rækkefølge i det sorterede array. Array.prototype.flat(depth=1)flader et array til en bestemt dybde, hvilket betyder, at alle underarrayelementer (op til den angivne dybde) er sammenkædede rekursivt.

11. udgave - ECMAScript 2020

Den 11. udgave, eller ECMAScript 2020, blev udgivet i juni 2020. Ud over nye funktioner introducerer denne version en BigIntprimitiv type for vilkårlige størrelser, nullish coalescing operator og globalThis object .

BigInts oprettes enten med BigIntkonstruktøren eller med syntaksen 10n, hvor "n" placeres efter tallet literal. BigInts tillader repræsentation og manipulation af heltal udover Number.MAX_SAFE_INTEGER, mens Numre repræsenteres af en dobbeltpræcision 64-bit IEEE 754- værdi. De indbyggede funktioner i Mather ikke kompatible med BigInts; for eksempel skal eksponentiering af BigInts udføres med **operatøren i stedet for Math.pow.

Den nullish koalescerende operatør,, ??returnerer sin højre operand, når dens venstre side er nulleller undefined. Dette står i kontrast til ||operatøren, som ville vende tilbage "string"for alle "falske" værdier, som dem herunder.

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

Valgfri kæde gør det muligt at få adgang til et objekts indlejrede egenskaber uden at have et OG -tjek på hvert niveau.

Et eksempel er const zipcode = person?.address?.zipcode. Hvis nogen af ​​ejendommene ikke er til stede, zipcodevil være undefined.

12. udgave - ECMAScript 2021

Den 12. udgave, eller ECMAScript 2021, blev udgivet i juni 2021. Denne version introducerer replaceAllmetoden til strenge; Promise.any, en løftekombinator, der kortslutter, når en inputværdi er opfyldt; AggregateError, en ny fejltype til at repræsentere flere fejl på én gang; logisk tildeling operatører ( ??=, &&=, ||=); WeakRef, for at henvise til et målobjekt uden at bevare det fra affaldsindsamling, og FinalizationRegistrytil at styre registrering og afregistrering af oprydningsoperationer, der udføres, når målobjekter er affaldssamling; separatorer til numeriske bogstaver ( 1_000); og Array.prototype.sortblev gjort mere præcis, hvilket reducerede mængden af ​​sager, der resulterer i en implementeringsdefineret sorteringsrækkefølge.

ES.Næste

ES.Next er et dynamisk navn, der refererer til, hvad den næste version er i skrivende stund. ES.Næste funktioner omfatter færdige forslag (også kaldet "trin 4 -forslag") som anført ved færdige forslag , der ikke er en del af en ratificeret specifikation. Sprogudvalget følger en "levende spec" -model, så disse ændringer er en del af standarden, og ratificering er en formalitet.

Funktioner

ECMAScript-sproget indeholder strukturerede , dynamiske , funktionelle og prototype-baserede funktioner.

Imperativt og struktureret

ECMAScript JavaScript understøtter struktureret programmering i C -stil. Tidligere understøttede JavaScript kun funktionsskala ved hjælp af søgeordet var, men ECMAScript 2015 tilføjede søgeordene letog consttillod JavaScript at understøtte både blokskala og funktionsskala. JavaScript understøtter automatisk indsættelse af semikolon , hvilket betyder, at semikolon, der normalt bruges til at afslutte en sætning i C, kan udelades i JavaScript.

Ligesom C-stil sprog, kontrol flow gøres med while, for, do/while, if/elseog switchudsagn. Funktioner er svagt skrevet og accepterer og returnerer enhver type. Argumenter, der ikke er angivet som standard til undefined.

Svagt skrevet

ECMAScript er svagt skrevet . Det betyder, at visse typer tildeles implicit baseret på den operation, der udføres. Der er imidlertid flere særheder i JavaScript's implementering af konverteringen af ​​en variabel fra en type til en anden. Disse finurligheder har været genstand for en tale med titlen Wat .

Dynamisk

ECMAScript er dynamisk skrevet. Således er en type forbundet med en værdi frem for et udtryk. ECMAScript understøtter forskellige måder at teste objekttypen på, herunder andetypning .

Transpiling

Siden ES 2015 er transpiling af JavaScript blevet meget almindeligt. Transpilation er en kilde-til-kilde-kompilering , hvor nyere versioner af JavaScript bruges, og en transpiler omskriver kildekoden, så den understøttes af ældre browsere. Normalt transpileres transpilere ned til ES3 for at opretholde kompatibilitet med alle versioner af browsere. Indstillingerne til transpiling til en bestemt version kan konfigureres efter behov. Transpiling tilføjer et ekstra trin til byggeprocessen og gøres nogle gange for at undgå behov for polyfills . Polyfills opretter nye funktioner til ældre miljøer, der mangler dem. Polyfills gør dette ved runtime i tolken, f.eks. Brugerens browser eller på serveren. I stedet omskriver omskrivning selve ECMA -koden i byggefasen af ​​udviklingen, før den når tolken.

Overensstemmelse

I 2010 begyndte Ecma International at udvikle en standardtest for Ecma 262 ECMAScript. Test262 er en ECMAScript -overensstemmelsestestpakke, der kan bruges til at kontrollere, hvor tæt en JavaScript -implementering følger ECMAScript -specifikationen. Testpakken indeholder tusindvis af individuelle tests, som hver tester nogle specifikke krav til ECMAScript -specifikationen. Udviklingen af ​​Test262 er et projekt fra Ecma Technical Committee 39 (TC39). Testrammen og individuelle tests er oprettet af medlemsorganisationer i TC39 og bidraget til Ecma til brug i Test262.

Vigtige bidrag blev leveret af Google (Sputnik testsuite) og Microsoft, der begge bidrog med tusindvis af tests. Test262 testsuite bestod af38 014 tests fra januar 2020. ECMAScript-specifikationer via ES7 understøttes godt i større webbrowsere . Tabellen nedenfor viser overensstemmelsesraten for aktuelle versioner af software med hensyn til de seneste udgaver af ECMAScript.

Overensstemmelse med scriptmotor
Scripting motor Referenceansøgning (er) Overensstemmelse
ES5 ES6 (2015) ES7 (2016) Nyere (2017+)
Chakra Microsoft Edge 18 100% 96% 100% 33%
SpiderMonkey 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%

Se også

Referencer

eksterne links

ISO standarder

ECMA standarder