ECMAScript - ECMAScript

ECMAScript
Paradigma Multi-paradigma : prototypové , funkční , imperativní
Navrhl Brendan Eich , Ecma International
Poprvé se objevil 1997 ; Před 24 lety ( 1997 )
Disciplína psaní slabý , dynamický
webová stránka www .ecma-international .org
Hlavní implementace
JavaScript , SpiderMonkey , V8 , ActionScript , JScript , QtScript , InScript , Google Apps Script
Ovlivněn
Self , HyperTalk , AWK , C , CoffeeScript , Perl , Python , Java , Scheme
ECMAScript (formát souboru)
Zdroj krystalu.png
Rozšíření názvu souboru
.es
Typ internetového média
aplikace/ekmascript
Vyvinuto Sun Microsystems ,
Ecma International
První vydání Červen 1997 ; Před 24 lety ( 1997-06 )
Poslední vydání
Vydání 12
(červen 2021 ; před 2 měsíci ) ( 2021-06 )
Typ formátu Skriptovací jazyk
webová stránka ECMA-262 , ECMA-290 ,
ECMA-327 , ECMA-357 ,
ECMA-402

ECMAScript ( / ɛ k m ə s k r ɪ p t / ) (nebo ES ) je všestranně použitelné programovací jazyk , standardizovaný Ecma International podle dokumentu ECMA-262 . Jedná se o standard JavaScriptu, který má zajistit interoperabilitu webových stránek v různých webových prohlížečích . ECMAScript je běžně používaný pro skriptování na straně klienta na World Wide Web , a to se stále více používají pro psaní serverových aplikací a služeb pomocí Node.js .

ECMAScript, ECMA-262 a JavaScript

ECMA-262 nebo ECMAScript Language Specification definuje jazyk ECMAScript , nebo jen ECMAScript (aka JavaScript ). ECMA-262 specifikuje pouze jazykovou syntaxi a sémantiku jádra API , jako je Array , Function a globalThis , zatímco platné implementace JavaScriptu přidávají vlastní funkce, jako je vstup/výstup nebo zpracování souborového systému.

Dějiny

Specifikace ECMAScript je standardizovanou specifikací skriptovacího jazyka vyvinutého Brendanem Eichem z Netscape ; původně pojmenovaný Mocha, pak LiveScript a nakonec JavaScript. V prosinci 1995 Sun Microsystems a Netscape oznámily JavaScript v tiskové zprávě. V listopadu 1996 Netscape oznámil setkání organizace Ecma International pro standardizaci za účelem posílení standardizace JavaScriptu. První vydání ECMA-262 bylo přijato Valným shromážděním Ecma v červnu 1997. Od té doby bylo vydáno několik vydání jazykové normy. Název „ECMAScript“ byl kompromisem mezi organizacemi zapojenými do standardizace jazyka, zejména Netscape a Microsoft, jejichž spory dominovaly na počátku standardních relací. Eich poznamenal, že „ECMAScript byl vždy nechtěný obchodní název, který zní jako kožní nemoc “. ECMAScript byl formován přes operační sémantiky prací na Stanford University a Ústavu výpočetní techniky , Imperial College London pro analýzu bezpečnosti a standardizace.

Verze

Je publikováno jedenáct vydání ECMA-262. Práce na verzi 12 standardu byly dokončeny v červnu 2021.

Historie verzí ECMAScript
Edice Datum zveřejnění název Změny oproti předchozímu vydání Editor
1 Červen 1997 První vydání Guy L. Steele Jr.
2 Června 1998 Redakční změny, aby byla specifikace plně v souladu s mezinárodní normou ISO/IEC 16262 Mike Cowlishaw
3 Prosinec 1999 Přidány regulární výrazy , lepší zpracování řetězců, nové ovládací příkazy, zpracování výjimek try/catch, přísnější definice chyb, formátování pro numerický výstup a další vylepšení Mike Cowlishaw
4 Opuštěný (poslední návrh 30. června 2003) Čtvrté vydání bylo upuštěno z důvodu politických rozdílů týkajících se jazykové složitosti. Mnoho funkcí navrhovaných pro Čtvrtou edici bylo zcela vypuštěno; některé byly začleněny do šestého vydání.
5 Prosinec 2009 Přidává „přísný režim“, podmnožinu určenou k zajištění důkladnější kontroly chyb a vyhýbání se konstrukcím náchylným k chybám. Objasňuje mnoho nejasností ve specifikaci 3. vydání a přizpůsobuje chování implementací v reálném světě, které se od této specifikace konzistentně lišily. Přidává některé nové funkce, jako jsou getry a nastavovače, podpora knihovny pro JSON a úplnější reflexe vlastností objektu. Pratap Lakshman, Allen Wirfs-Brock
5.1 Červen 2011 Toto vydání 5.1 normy ECMAScript je plně v souladu s třetím vydáním mezinárodní normy ISO/IEC 16262: 2011. Pratap Lakshman, Allen Wirfs-Brock
6 Červen 2015 ECMAScript 2015 (ES2015) Viz 6. vydání - ECMAScript 2015 Allen Wirfs-Brock
7 Červen 2016 ECMAScript 2016 (ES2016) Viz 7. vydání - ECMAScript 2016 Brian Terlson
8 Června 2017 ECMAScript 2017 (ES2017) Viz 8. vydání - ECMAScript 2017 Brian Terlson
9 Června 2018 ECMAScript 2018 (ES2018) Viz 9. vydání - ECMAScript 2018 Brian Terlson
10 Června 2019 ECMAScript 2019 (ES2019) Viz 10. vydání - ECMAScript 2019 Brian Terlson, Bradley Farias, Jordan Harband
11 Červen 2020 ECMAScript 2020 (ES2020) Viz 11. vydání - ECMAScript 2020 Jordan Harband, Kevin Smith
12 Června 2021 ECMAScript 2021 (ES2021) Viz 12. vydání - ECMAScript 2021 Jordan Harband, Shu-yu Guo, Michael Ficarra, Kevin Gibbons

V červnu 2004 Ecma International publikovala standard ECMA-357, definující rozšíření ECMAScript, známé jako ECMAScript pro XML (E4X). Ecma také definovala „kompaktní profil“ pro ECMAScript-známý jako ES-CP nebo ECMA 327-který byl navržen pro zařízení s omezenými zdroji a který byl v roce 2015 stažen.

4. vydání (opuštěné)

Navrhované čtvrté vydání ECMA-262 ( ECMAScript 4 nebo ES4 ) by bylo první velkou aktualizací ECMAScriptu od vydání třetího vydání v roce 1999. Specifikace (spolu s referenční implementací) byla původně zaměřena na dokončení do října 2008. První návrh byl datován v únoru 1999. Pracovní skupina vydala 23. října 2007 přehled jazyka.

V srpnu 2008 byl návrh 4. vydání ECMAScript zmenšen zpět na kód projektu s názvem ECMAScript Harmony . Mezi funkce, o nichž se v té době diskutovalo pro Harmony, patří:

Účelem těchto funkcí bylo částečně lepší podpora programování ve velkém a umožnění obětování některé ze schopností skriptu být dynamický pro zlepšení výkonu. Například Tamarin -virtuální stroj pro ActionScript, vyvinutý a open source od Adobe-má podporu kompilace just-in-time (JIT) pro určité třídy skriptů.

Kromě zavedení nových funkcí bylo navrženo opravit některé chyby ES3 v edici 4. Tyto opravy a další a podpora kódování/dekódování JSON byly vloženy do specifikace ECMAScript, 5. vydání.

Práce na vydání 4 začaly po dokončení specifikace ES-CP (Compact Profile) a pokračovaly přibližně 18 měsíců, kdy bylo dosaženo pomalého pokroku, který vyvažoval teorii specifikace Netscape JavaScript 2 se zkušenostmi s implementací JScript .NET společnosti Microsoft. Po nějaké době se fokus přesunul na standard ECMAScript pro XML (E4X). Aktualizace neproběhla bez kontroverzí. Na konci roku 2007 se na řadě blogů stala veřejná debata mezi Eichem, pozdějším CTO Mozilla Foundation a Chrisem Wilsonem , architektem platformy společnosti Microsoft pro Internet Explorer . Wilson varoval, že vzhledem k tomu, že navrhované změny v ECMAScript způsobily, že byly v některých ohledech zpětně nekompatibilní s předchozími verzemi jazyka, tato aktualizace znamenala „prolomení webu“ a že zúčastněné strany, které byly proti změnám, byly „skryty před pohledem“. Eich reagoval prohlášením, že se zdá, že Wilson „opakuje lži na blozích“, a popřel, že by došlo k pokusu potlačit nesouhlas, a vyzval kritiky, aby uvedli konkrétní příklady nekompatibility. Poukázal na to, že Microsoft Silverlight a Adobe AIR se spoléhají na C# a ActionScript 3, přičemž oba jsou větší a složitější než ECMAScript Edition 3.

5. vydání

Yahoo, Microsoft, Google a další disidenti 4. vydání vytvořili vlastní podvýbor, který navrhl méně ambiciózní aktualizaci ECMAScript 3, předběžně pojmenovanou ECMAScript 3.1. Toto vydání by se zaměřilo na zabezpečení a aktualizace knihoven s velkým důrazem na kompatibilitu. Po výše uvedeném veřejném sparringu se týmy ECMAScript 3.1 a ECMAScript 4 dohodly na kompromisu: na těchto dvou edicích se bude pracovat souběžně s koordinací mezi týmy, aby bylo zajištěno, že ECMAScript 3.1 zůstane přísnou podmnožinou ECMAScript 4 v sémantice i syntax.

Rozdílné filosofie v každém týmu však vedly k opakovanému porušení pravidla podmnožiny a zůstávalo pochybné, že odpůrci ECMAScript 4 budou někdy v budoucnu podporovat nebo implementovat ECMAScript 4. Po více než roce od neshody ohledně budoucnosti ECMAScript v rámci technického výboru Ecma 39 dosáhly oba týmy v červenci 2008 nového kompromisu: Brendan Eich oznámil, že Ecma TC39 se zaměří na ECMAScript 3.1 (později přejmenovaný na ECMAScript, 5. místo) Edition) s plnou spoluprací všech stran a prodejci by se do začátku roku 2009 zaměřili alespoň na dvě interoperabilní implementace. V dubnu 2009 Ecma TC39 zveřejnila „konečný“ návrh 5. vydání a oznámila, že se očekává testování interoperabilních implementací. dokončeno do poloviny července. 3. prosince 2009 bylo vydáno 5. vydání ECMA-262.

6. vydání - ECMAScript 2015

6. vydání, ECMAScript 6 ( ES6 ) a později přejmenované na ECMAScript 2015, bylo dokončeno v červnu 2015. Tato aktualizace přidává významnou novou syntaxi pro psaní složitých aplikací, včetně deklarací tříd ( ), modulům ES6 se líbí , ale definuje je sémanticky ve stejném podmínky jako přísný režim ECMAScript 5. Mezi další nové funkce patří iterátory a smyčky, generátory ve stylu Pythonu , výraz funkce šipky ( ), klíčové slovo pro místní deklarace, klíčové slovo pro konstantní místní deklarace, binární data, typovaná pole, nové kolekce (mapy, sady a WeakMap), sliby , počet a matematické vylepšení, reflexe, proxy (metaprogramování pro virtuální objekty a obálky) a literály šablon pro řetězce. Kompletní seznam je obsáhlý. Jako první specifikace „ECMAScript Harmony“ je také známá jako „ES6 Harmony“. class Foo { ... }import * as moduleName from "..."; export const Foofor...of() => {...}letconst

7. vydání - ECMAScript 2016

7. vydání, neboli ECMAScript 2016, bylo dokončeno v červnu 2016. Mezi jeho funkce patří blokování rozsahů proměnných a funkcí, destrukční vzory (proměnných), správné volání ocasu, operátor umocňování **čísel await, asyncklíčová slova pro asynchronní programování (jako příprava pro ES2017) a Array.prototype.includesfunkce.

Operátor umocnění je ekvivalentní Math.pow, ale poskytuje jednodušší syntaxi podobnou jazykům jako Python, F#, Perl a Ruby. async/ awaitbyl oslavován jako snadnější způsob, jak používat sliby a vyvíjet asynchronní kód.

8. vydání - ECMAScript 2017

8. vydání, nebo ECMAScript 2017, byla dokončena v červnu 2017. Mezi jeho vlastnosti patří Object.values, Object.entriesa Object.getOwnPropertyDescriptorsfunkce pro snadnou manipulaci s objekty, async/awaitkonstrukce, které používá generátory a sliby, a další funkce pro souběžnost a atomových zbraní .

9. vydání - ECMAScript 2018

9. vydání, neboli ECMAScript 2018, bylo dokončeno v červnu 2018. Mezi nové funkce patří operátor spreadů, klidové parametry, asynchronní iterace Promise.prototype.finallya dodatky k RegExp.

Operátor šíření umožňuje snadné kopírování vlastností objektu, jak je znázorněno níže.

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. vydání - ECMAScript 2019

10. vydání, nebo ECMAScript 2019, byla vydána v červnu 2019. Přidaná funkce zahrnují, ale nejsou omezeny na Array.prototype.flat, Array.prototype.flatMap, změní se Array.sorti Object.fromEntries.

Array.sortje nyní zaručeno, že je stabilní, což znamená, že prvky se stejnou prioritou řazení se v seřazeném poli zobrazí ve stejném pořadí. Array.prototype.flat(depth=1)sloučí pole do zadané hloubky, což znamená, že všechny prvky dílčího pole (až do zadané hloubky) jsou rekurzivně spojeny.

11. vydání - ECMAScript 2020

11. vydání, neboli ECMAScript 2020, bylo vydáno v červnu 2020. Kromě nových funkcí tato verze zavádí BigIntprimitivní typ pro celá čísla libovolné velikosti, operátor nulového spojování a objekt globalThis .

BigInts jsou vytvořeny buď pomocí BigIntkonstruktoru, nebo pomocí syntaxe 10n, kde je za číslovkou dosazeno „n“. BigInts umožňují reprezentaci a manipulaci s celými čísly za hranicemi Number.MAX_SAFE_INTEGER, zatímco Numbers jsou reprezentovány 64bitovou hodnotou IEEE 754 s dvojitou přesností . Vestavěné funkce Mathnejsou kompatibilní s BigInts; například umocnění BigInts musí být provedeno s **operátorem místo Math.pow.

Nulový spojující operátor, ??vrací svůj operand na pravé straně, pokud je jeho levá strana nullnebo undefined. To je v kontrastu s ||operátorem, který by se vrátil "string"pro všechny „falešné“ hodnoty, jako jsou ty níže.

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

Volitelné řetězení umožňuje přístup ke vnořeným vlastnostem objektu bez nutnosti kontroly AND na každé úrovni.

Příkladem je const zipcode = person?.address?.zipcode. Pokud některá z vlastností není k dispozici, zipcodebude undefined.

12. vydání - ECMAScript 2021

12. vydání, neboli ECMAScript 2021, bylo vydáno v červnu 2021. Tato verze zavádí replaceAllmetodu pro řetězce; Promise.any, slibovací kombinátor, který zkratuje, když je splněna vstupní hodnota; AggregateError, nový typ chyby, který představuje více chyb najednou; Provozovatelé logické přiřazení ( ??=, &&=, ||=); WeakRef, za odkazování na cílový objekt, aniž by byl chráněn před uvolněním paměti, a FinalizationRegistryza správu registrace a zrušení registrace operací čištění prováděných při shromažďování odpadků z cílových objektů; oddělovače pro číselné literály ( 1_000); a Array.prototype.sortbyl zpřesněn, čímž se snížilo množství případů, které vedou k pořadí řazení definovaném implementací.

ES. Další

ES.Next je dynamický název, který odkazuje na jakoukoli další verzi v době psaní. Mezi funkce ES.Next patří hotové návrhy (aka „návrhy fáze 4“) uvedené v hotových návrzích, které nejsou součástí ratifikované specifikace. Jazyková komise se řídí modelem „živé specifikace“, takže tyto změny jsou součástí standardu a ratifikace je formalita.

Funkce

Jazyk ECMAScript obsahuje strukturované , dynamické , funkční a prototypové funkce.

Imperativní a strukturované

ECMAScript JavaScript podporuje strukturované programování ve stylu C. Dříve JavaScript podporoval pouze rozsah funkcí pomocí klíčového slova var, ale ECMAScript 2015 přidal klíčová slova leta constumožnil JavaScriptu podporovat rozsah blokování i rozsah funkcí. JavaScript podporuje automatické vkládání středníků , což znamená, že středníky, které se běžně používají k ukončení příkazu v jazyce C, lze v jazyce JavaScript vynechat.

Stejně jako C-styl jazyky, řízení toku dat se děje s while, for, do/while, if/elsea switchvýkazů. Funkce jsou slabě napsané a mohou přijímat a vracet jakýkoli typ. Argumenty nejsou standardně k dispozici undefined.

Slabě napsané

ECMAScript je slabě napsaný . To znamená, že určité typy jsou přiřazeny implicitně na základě prováděné operace. Existuje však několik zvláštností implementace JavaScriptu při převodu proměnné z jednoho typu na druhý. Tyto vtípky byly předmětem řeči s názvem Wat .

Dynamický

ECMAScript je dynamicky zadáván. Typ je tedy spojen spíše s hodnotou než s výrazem. ECMAScript podporuje různé způsoby testování typu objektů, včetně psaní kachen .

Transpiling

Od ES 2015 je transpilování JavaScriptu velmi běžné. Transpilace je kompilace ze zdroje na zdroj, ve které se používají novější verze JavaScriptu, a transpiler přepíše zdrojový kód tak, aby byl podporován staršími prohlížeči. Transpilery se obvykle překládají až na ES3, aby byla zachována kompatibilita se všemi verzemi prohlížečů. Nastavení pro transpilování do konkrétní verze lze nakonfigurovat podle potřeby. Transpiling přidává další krok k procesu sestavení a někdy se provádí, aby se zabránilo potřebě polyfills . Polyfills vytvářejí nové funkce pro starší prostředí, která je postrádají. Polyfills to dělají za běhu v tlumočníku, například v prohlížeči uživatele nebo na serveru. Místo toho transpiling přepíše samotný kód ECMA během fáze sestavení vývoje, než dosáhne tlumočníka.

Shoda

V roce 2010 zahájila společnost Ecma International vývoj standardního testu pro Ecma 262 ECMAScript. Test262 je sada testů shody ECMAScript, kterou lze použít ke kontrole, jak úzce implementace JavaScriptu odpovídá specifikaci ECMAScript. Sada testů obsahuje tisíce jednotlivých testů, z nichž každý testuje určité specifické požadavky specifikace ECMAScript. Vývoj Test262 je projektem technické komise Ecma 39 (TC39). Testovací rámec a jednotlivé testy vytvářejí členské organizace TC39 a přispívají do Ecma pro použití v Test262.

Důležité příspěvky poskytly společnosti Google (testovací souprava Sputnik) a Microsoft, které přispěly tisíci testy. Testovací souprava Test262 se skládala z38 014 testů k lednu 2020. Specifikace ECMAScript prostřednictvím ES7 jsou dobře podporovány ve velkých webových prohlížečích . Níže uvedená tabulka ukazuje míru shody pro aktuální verze softwaru s ohledem na nejnovější vydání ECMAScript.

Shoda skriptovacího motoru
Skriptovací stroj Referenční aplikace Shoda
ES5 ES6 (2015) ES7 (2016) Novější (2017+)
Čakra Microsoft Edge 18 100% 96% 100% 33%
Pavoučí opice 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%

Viz také

Reference

externí odkazy

ISO normy

Standardy ECMA