ECMAScript versionshistorik
ECMAScript är en JavaScript-standard utvecklad av Ecma International . Sedan 2015 har större versioner publicerats varje juni.
ECMAScript 2022, den 13:e och nuvarande versionen, släpptes i juni 2022.
versioner
Utgåva | Publiceringsdatum | namn | Ändringar från tidigare upplaga | Redaktör |
---|---|---|---|---|
1 | juni 1997 | Första upplagan | Guy L. Steele Jr. | |
2 | juni 1998 | Redaktionella ändringar för att hålla specifikationen helt i linje med den internationella standarden ISO/IEC 16262 | Mike Cowlishaw | |
3 | december 1999 | Lade till reguljära uttryck , bättre stränghantering, nya kontrollsatser, försök/fånga undantagshantering, strängare definition av fel, formatering för numerisk utdata och andra förbättringar | Mike Cowlishaw | |
4 | Övergiven (senaste utkastet 30 juni 2003) | Fjärde upplagan övergavs på grund av politiska skillnader angående språkkomplexitet. Många funktioner som föreslagits för den fjärde upplagan har helt tagits bort; några införlivades i den sjätte upplagan. | ||
5 | december 2009 | Lägger till "strikt läge", en delmängd avsedd att ge mer grundlig felkontroll och undvika felbenägna konstruktioner. Klargör många oklarheter i specifikationen för 3:e utgåvan och tillgodoser beteendet hos verkliga implementeringar som skilde sig konsekvent från den specifikationen. Lägger till några nya funktioner, såsom getters och seters, biblioteksstöd för JSON och mer fullständig reflektion över objektegenskaper. | Pratap Lakshman, Allen Wirfs-Brock | |
5.1 | juni 2011 | Denna utgåva 5.1 av ECMAScript-standarden är helt i linje med den tredje upplagan av den internationella standarden ISO/IEC 16262:2011. | Pratap Lakshman, Allen Wirfs-Brock | |
6 | juni 2015 | ECMAScript 2015 (ES2015) | Se 6:e upplagan – ECMAScript 2015 | Allen Wirfs-Brock |
7 | juni 2016 | ECMAScript 2016 (ES2016) | Se 7:e upplagan – ECMAScript 2016 | Brian Terlson |
8 | juni 2017 | ECMAScript 2017 (ES2017) | Se 8:e upplagan – ECMAScript 2017 | Brian Terlson |
9 | juni 2018 | ECMAScript 2018 (ES2018) | Se 9:e upplagan – ECMAScript 2018 | Brian Terlson |
10 | juni 2019 | ECMAScript 2019 (ES2019) | Se 10:e upplagan – ECMAScript 2019 | Brian Terlson, Bradley Farias, Jordan Harband |
11 | juni 2020 | ECMAScript 2020 (ES2020) | Se 11:e upplagan – ECMAScript 2020 | Jordan Harband, Kevin Smith |
12 | juni 2021 | ECMAScript 2021 (ES2021) | Se 12:e upplagan – ECMAScript 2021 | Jordan Harband, Shu-yu Guo, Michael Ficarra, Kevin Gibbons |
13 | juni 2022 | ECMAScript 2022 (ES2022) | Se 13:e upplagan – ECMAScript 2022 | Shu-yu Guo, Michael Ficarra, Kevin Gibbons |
I juni 2004 publicerade Ecma International standarden ECMA-357, som definierade en tillägg till ECMAScript, känd som ECMAScript för XML (E4X). Ecma definierade också en "kompakt profil" för ECMAScript – känd som ES-CP eller ECMA 327 – som designades för resursbegränsade enheter, som drogs tillbaka 2015.
4:e upplagan (övergiven)
Den föreslagna fjärde utgåvan av ECMA-262 ( ECMAScript 4 eller ES4 ) skulle ha varit den första större uppdateringen av ECMAScript sedan den tredje utgåvan publicerades 1999. Specifikationen (tillsammans med en referensimplementering) var ursprungligen avsedd att vara klar i oktober 2008. Det första utkastet daterades i februari 1999. En översikt över språket släpptes av arbetsgruppen den 23 oktober 2007.
I augusti 2008 hade ECMAScript 4:e utgåvans förslag skalats tillbaka till en projektkod med namnet ECMAScript Harmony . Funktioner som diskuterades för Harmony då var:
- klasser ,
- ett modulsystem ,
- valfria typkommentarer och statisk typning , förmodligen med hjälp av ett strukturellt typsystem ,
- generatorer och iteratorer ,
- destruktureringsuppdrag , och
- algebraiska datatyper .
Avsikten med dessa funktioner var delvis att bättre stödja programmering i den stora , och att tillåta att offra en del av skriptets förmåga att vara dynamisk för att förbättra prestandan. Till exempel Tamarin – den virtuella maskinen för ActionScript, utvecklad och öppen källkod av Adobe – stöd för just-in-time kompilering (JIT) för vissa klasser av skript.
Förutom att introducera nya funktioner, föreslogs vissa ES3-buggar att fixas i utgåva 4. Dessa korrigeringar och andra, och stöd för JSON -kodning/-avkodning, har vikas in i ECMAScript, 5:e upplagan.
Arbetet startade med Edition 4 efter att ES-CP (Compact Profile)-specifikationen slutförts, och fortsatte i cirka 18 månader där långsamma framsteg gjordes och balanserade teorin om Netscapes JavaScript 2-specifikation med implementeringserfarenheten av Microsofts JScript .NET. Efter en tid flyttades fokus till ECMAScript for XML (E4X). Uppdateringen har inte varit utan kontroverser. I slutet av 2007 blev en debatt mellan Eich, senare Mozilla Foundations CTO, och Chris Wilson, Microsofts plattformsarkitekt för Internet Explorer , offentlig på ett antal bloggar . Wilson varnade för att eftersom de föreslagna ändringarna av ECMAScript gjorde det bakåtinkompatibelt i vissa avseenden med tidigare versioner av språket, innebar uppdateringen att "bryta webben" och att intressenter som motsatte sig ändringarna "gömdes undan". Eich svarade med att säga att Wilson verkade "upprepa falskheter i bloggar" och förnekade att det fanns försök att undertrycka oliktänkande och utmanade kritiker att ge specifika exempel på inkompatibilitet. Han påpekade att Microsoft Silverlight och Adobe AIR förlitar sig på C# respektive ActionScript 3, som båda är större och mer komplexa än ECMAScript Edition 3.
5:e upplagan – ECMAScript 2009
Yahoo, Microsoft, Google och andra dissenter i fjärde upplagan bildade sin egen underkommitté för att utforma en mindre ambitiös uppdatering av ECMAScript 3, preliminärt kallad ECMAScript 3.1. Denna utgåva skulle fokusera på säkerhet och biblioteksuppdateringar, med stor tonvikt på kompatibilitet. Efter den tidigare nämnda offentliga sparringen kom ECMAScript 3.1- och ECMAScript 4-teamen överens om en kompromiss: de två utgåvorna skulle arbetas parallellt med samordning mellan teamen för att säkerställa att ECMAScript 3.1 förblir en strikt delmängd av ECMAScript 4 i både semantik och syntax.
Men de olika filosofierna i varje team resulterade i upprepade brott av delmängdsregeln, och det förblev tveksamt om ECMAScript 4-dissenterna någonsin skulle stödja eller implementera ECMAScript 4 i framtiden. Efter över ett år sedan oenigheten om framtiden för ECMAScript inom Ecma Technical Committee 39 nådde de två teamen en ny kompromiss i juli 2008: Brendan Eich meddelade att Ecma TC39 skulle fokusera arbetet på ECMAScript 3.1 (senare omdöpt till ECMAScript, 5th Edition) projekt med fullt samarbete mellan alla parter, och leverantörer skulle inrikta sig på minst två interoperabla implementeringar i början av 2009. I april 2009 publicerade Ecma TC39 det "slutliga" utkastet till den 5:e upplagan och meddelade att testning av interoperabla implementeringar förväntades bli färdig i mitten av juli. Den 3 december 2009 publicerades ECMA-262 5:e upplagan.
Tillägg inkluderar JSON , String.trim()
för att enkelt ta bort blanksteg som omger en sträng ( "exempel"
till "exempel"
), String.charAt()
för att returnera ett enstaka tecken från en given position i en sträng och Array.isArray()
. Ett kommatecken efter det sista värdeparet i ett objekt ( var exempel = { "property1":"value1", "property2":"value2", }
) orsakar inte längre ett syntaxfel.
6:e upplagan – ECMAScript 2015
Den 6:e upplagan, ECMAScript 6 ( ES6 ) och senare omdöpt till ECMAScript 2015, slutfördes i juni 2015. Denna uppdatering lägger till betydande ny syntax för att skriva komplexa applikationer, inklusive klassdeklarationer ( klass Foo { ... }
), ES6-moduler som import * som modulnamn från "..." ; export const Foo
, men definierar dem semantiskt i samma termer som ECMAScript 5 strikt läge. Andra nya funktioner inkluderar iteratorer och för ... av
loopar, generatorer i Python -stil, pilfunktionsuttryck ( () => {...}
), let
nyckelord för lokala deklarationer, const
nyckelord för konstanta lokala deklarationer, binära data, skrivna arrayer, nya samlingar (kartor, uppsättningar och WeakMap), löften , siffror och matematiska förbättringar, reflektion, proxyservrar (metaprogrammering för virtuella objekt och omslag) och mallbokstavar med backticks ( `
) för flerradiga strängar utan escape-tecken . Den kompletta listan är omfattande. Som den första "ECMAScript Harmony"-specifikationen är den också känd som "ES6 Harmony".
7:e upplagan – ECMAScript 2016
Den 7:e upplagan, eller ECMAScript 2016, slutfördes i juni 2016. Dess funktioner inkluderar blockomfattning av variabler och funktioner, destruktureringsmönster (av variabler), korrekta svansanrop , exponentieringsoperator **
för nummer, await
, asynkrona
nyckelord för asynkron programmering (som en förberedelse för ES2017), och funktionen Array.prototype.includes .
Exponentieringsoperatorn motsvarar Math.pow
, men ger en enklare syntax som liknar språk som Python, F#, Perl och Ruby. async
/ await
hyllades som ett enklare sätt att använda löften och utveckla asynkron kod.
8:e upplagan – ECMAScript 2017
Den 8:e utgåvan, eller ECMAScript 2017, slutfördes i juni 2017. Dess funktioner inkluderar Object.values
, Object.entries
och Object.getOwnPropertyDescriptors
funktionerna för enkel manipulering av objekt, asynkrona
/ avvakta
konstruktioner som använder generatorer och löften, och ytterligare funktioner för samtidighet och atomer .
9:e upplagan – ECMAScript 2018
Den nionde utgåvan, eller ECMAScript 2018, slutfördes i juni 2018. Nya funktioner inkluderar spridningsoperatorn och viloparametrar ( ...
) för objektliterals, asynkron iteration, Promise.prototype.finally
och tillägg till RegExp.
Spridningsoperatorn möjliggör enkel kopiering av objektegenskaper, som visas nedan.
låt objekt = { a : 1 , b : 2 } låt objekt Klon = Objekt . tilldela ({}, objekt ) // före ES2018 let objectClone = {... object } // ES2018 syntax let otherObject = { c : 3 , ... object } console . log ( otherObject ) // -> {c: 3, a: 1, b: 2}
10:e upplagan – ECMAScript 2019
Den tionde utgåvan, eller ECMAScript 2019, publicerades i juni 2019. Tillagda funktioner inkluderar, men är inte begränsade till, Array.prototype.flat
, Array.prototype.flatMap
, ändringar av Array.sort
och Object.fromEntries
.
Array.sort
är nu garanterat stabil, vilket innebär att element med samma sorteringsprioritet kommer att visas i samma ordning i den sorterade arrayen. Array.prototype.flat(depth=1)
plattar ut en array till ett specificerat djup, vilket betyder att alla subarray-element (upp till det specificerade djupet) sammanfogas rekursivt.
En annan anmärkningsvärd förändring är att så kallad catch binding blev valfri.
11:e upplagan – ECMAScript 2020
Den 11:e upplagan, eller ECMAScript 2020, publicerades i juni 2020. Förutom nya funktioner introducerar den här versionen en BigInt
primitiv typ för heltal av godtycklig storlek, den nulliska koalescerande operatorn och globalThis-objektet .
BigInts skapas antingen med BigInt-
konstruktorn eller med syntaxen 10n
, där "n" placeras efter talet literal. BigInts tillåter representation och manipulering av heltal bortom Number.MAX_SAFE_INTEGER
, medan Numbers representeras av ett dubbelprecision 64-bitars IEEE 754- värde. De inbyggda funktionerna i Math
är inte kompatibla med BigInts; exponentiering av BigInts måste till exempel göras med **
istället för Math.pow
.
Den nullish koalescerande operatören, ??
, returnerar dess högra operand när dess vänstra sida är null
eller odefinierad
. Detta står i kontrast till ||
operator, som skulle returnera "sträng"
för alla "falska" värden, som de nedan.
odefinierat ?? "sträng" // -> "sträng" null ?? "sträng" // -> "sträng" falsk ?? "sträng" // -> falskt NaN ?? "sträng" // -> NaN
Valfri kedja gör det möjligt att komma åt de kapslade egenskaperna för ett objekt utan att ha en OCH-kontroll på varje nivå. Ett exempel är const zipcode = person?.address?.zipcode
. Om någon av egenskaperna inte finns postnummer
att vara odefinierat
.
12:e upplagan – ECMAScript 2021
Den 12:e upplagan, ECMAScript 2021, publicerades i juni 2021. Denna version introducerar metoden replaceAll
för strängar; Promise.any
, en löfteskombinator som kortsluter när ett ingångsvärde är uppfyllt; AggregateError
, en ny feltyp som representerar flera fel samtidigt; logiska tilldelningsoperatorer ( ??=
, &&=
, ||=
); WeakRef
, för att hänvisa till ett målobjekt utan att bevara det från sophämtning, och FinalizationRegistry
, för att hantera registrering och avregistrering av saneringsoperationer som utförs när målobjekt samlas in som skräp; separatorer för numeriska bokstaver ( 1_000)
; och Array.prototype.sort
gjordes mer exakta, vilket minskade antalet fall som resulterar i en implementeringsdefinierad sorteringsordning.
13:e upplagan – ECMAScript 2022
Den 13:e upplagan, ECMAScript 2022, publicerades i juni 2022. Den här versionen introducerar toplevel await
, vilket gör att nyckelordet kan användas på modulernas översta nivå; nya klasselement: offentliga och privata instansfält, offentliga och privata statiska fält, privata instansmetoder och accessorer och privata statiska metoder och accessorer; statiska block inuti klasser, för att utföra initiering av utvärdering per klass; #x i obj-
syntax, för att testa förekomsten av privata fält på objekt; reguljära uttrycksmatchningsindex via /d
-flaggan, som tillhandahåller start- och slutindex för matchade delsträngar; orsaksegenskapen på Error-
objekt, som kan användas för att registrera en orsakskedja i fel ;
at-metoden för Strings, Arrays och TypedArrays, som tillåter relativ indexering; och Object.hasOwn
, ett bekvämt alternativ till Object.prototype.hasOwnProperty
.
ES.Nästa
ES.Next är ett dynamiskt namn som refererar till vad nästa version är i skrivande stund. ES.Next-funktioner inkluderar färdiga förslag (alias "steg 4-förslag") som listas vid färdiga förslag som inte ingår i en ratificerad specifikation. Språkkommittén följer en "levande spec"-modell, så dessa ändringar är en del av standarden, och ratificering är en formalitet. [ citat behövs ]
externa länkar
ISO-standarder
ECMA-standarder
-
ECMAScript-språkspecifikation
- 3:e upplagan, december 1999: PDF
- Edition 3 Final, mars 2000: PDF
- 4:e upplagan (översikt): PDF
- 4:e upplagan (slutligt utkast): HTML , PDF
- 5:e upplagan, december 2009: PDF
- 5.1 Edition, juni 2011: HTML , PDF
- 6:e upplagan, juni 2015 (ECMAScript 2015 språkspecifikation): HTML , PDF
- 7:e upplagan, juni 2016 (ECMAScript 2016 Language Specification): HTML , PDF
- 8:e upplagan, juni 2017 (ECMAScript 2017 Language Specification): HTML , PDF
- 9:e upplagan, juni 2018 (ECMAScript 2018 Language Specification): HTML , PDF
- 10:e upplagan, juni 2019 (ECMAScript 2019 Language Specification): HTML , PDF
- 11:e upplagan, juni 2020 (ECMAScript 2020 Language Specification): HTML , PDF
- 12:e upplagan, juni 2021 (ECMAScript 2021 Language Specification): HTML , PDF
- 13:e upplagan, juni 2022 (ECMAScript 2022 Språkspecifikation): HTML
- ECMA-290 ECMAScript-komponentspecifikation (juni 1999)
- ECMA-327 ECMAScript 3rd Edition Compact Profile (juni 2001)
- ECMA-357 ECMAScript for XML (E4X)-specifikation (juni 2004)