ECMAScript (Polski)
Specyfikacja ECMAScript jest ustandaryzowaną specyfikacją języka skryptowego opracowanego przez Brendana Eicha z Netscape; początkowo pod nazwą Mocha, następnie LiveScript, a w końcu JavaScript. W grudniu 1995 roku Sun Microsystems i Netscape ogłosiły JavaScript w komunikacie prasowym. W listopadzie 1996 roku Netscape ogłosił spotkanie Międzynarodowej Organizacji Normalizacyjnej Ecma w celu przyspieszenia standaryzacji JavaScript. Pierwsze wydanie ECMA – 262 zostało przyjęte przez Zgromadzenie Ogólne Ecma w czerwcu 1997 roku. Od tego czasu ukazało się kilka wydań standardu językowego., Nazwa „ECMAScript” była kompromisem pomiędzy organizacjami zajmującymi się standaryzacją języka, zwłaszcza Netscape i Microsoft, których spory zdominowały wczesne sesje standardów. Eich skomentował, że ” ECMAScript zawsze był niechcianą nazwą handlową, która brzmi jak choroba skóry.”ECMAScript został sformalizowany poprzez semantykę operacyjną dzięki pracy na Uniwersytecie Stanforda i Wydziale Informatyki Imperial College London w zakresie analizy bezpieczeństwa i Standaryzacji.,
zarówno JavaScript, jak i JScript są zgodne ze specyfikacją ECMAScript, zapewniając jednocześnie dodatkowe funkcje nie opisane w specyfikacji.
Wersjedytuj
ukazało się jedenaście wydań ECMA-262. Prace nad wersją 11 standardu zostały zakończone w czerwcu 2020 roku.,
Edycja | Data publikacji | Nazwa | zmiany od poprzedniej edycji | edytor | |||
---|---|---|---|---|---|---|---|
1 | czerwiec 1997 | pierwsze wydanie | guy L. steele Jr.,998 | zmiany redakcyjne, aby zachować pełną zgodność specyfikacji z międzynarodową normą ISO/IEC 16262 | Mike Cowlishaw | ||
3 | grudzień 1999 | Dodano wyrażenia regularne, lepszą obsługę ciągów, nowe instrukcje kontrolne, obsługę wyjątków try/catch, ściślejszą definicję błędów, formatowanie dla wyjścia numerycznego i inne ulepszenia | Mike cowlishaw | ||||
4 | porzucono (ostatni projekt 30 czerwca 2003) | czwarta edycja została porzucona ze względu na różnice polityczne dotyczące złożoności języka., Wiele funkcji zaproponowanych do czwartej edycji zostało całkowicie porzuconych, niektóre zostały włączone do szóstej edycji. | |||||
5 | December 2009 | dodaje „strict mode”, podzbiór mający na celu dokładniejsze sprawdzanie błędów i unikanie podatnych na błędy konstrukcji. Wyjaśnia wiele niejasności w specyfikacji 3rd edition i uwzględnia zachowanie rzeczywistych implementacji, które różniły się konsekwentnie od tej specyfikacji., Dodaje kilka nowych funkcji, takich jak gettery i settery, obsługa bibliotek dla JSON i pełniejsze odzwierciedlenie właściwości obiektu. | Pratap Lakshman, Allen Wirfs-Brock | ||||
5.1 | June 2011 | ta edycja 5.1 standardu ECMAScript jest w pełni zgodna z trzecią edycją międzynarodowego standardu ISO / IEC 16262:2011., | Zobacz 9.edycję – ECMAScript 2018 | Brian Terlson | |||
10 | czerwiec 2019 | ECMAScript 2019 (ES2019) | Zobacz 10. edycję – ECMAScript 2019 | Brian Terlson, Bradley Farias, Jordan harband | |||
11 | Czerwiec 2020 | ECMAScript 2020 (es2020) | zobacz 11. edycję – ECMAScript 2020 | Jordan harband, Kevin Smith |
w czerwcu 2004 roku Ecma International opublikowała standard ECMA-357, definiujący rozszerzenie do ECMAScript, znane jako ECMAScript for XML (E4X)., Ecma zdefiniował również „kompaktowy profil” dla ECMAScript – znany jako ES-CP lub ECMA 327-który został zaprojektowany dla urządzeń ograniczonych zasobami, który został wycofany w 2015 roku.
4th Edition (abandoned)Edit
proponowane czwarte wydanie ECMA-262 (ECMAScript 4 lub ES4) byłoby pierwszą dużą aktualizacją ECMAScript od czasu wydania trzeciego w 1999 roku. Specyfikację (wraz z implementacją referencyjną) pierwotnie planowano ukończyć do października 2008 roku. Pierwszy projekt powstał w lutym 1999 roku., Przegląd języka został wydany przez grupę roboczą 23 października 2007 roku.
do sierpnia 2008 roku propozycja czwartej edycji ECMAScript została przeskalowana z powrotem do projektu o nazwie kodowej ECMAScript Harmony. Funkcje omawiane w tym czasie dla Harmony obejmowały:
- Klasy,
- system modułów,
- opcjonalne adnotacje typu i typowanie statyczne, prawdopodobnie przy użyciu systemu typów strukturalnych,
- generatory i Iteratory,
- przypisanie destrukcji i
- algebraiczne typy danych.,
celem tych funkcji było po części lepsze wsparcie programowania w dużych, a także umożliwienie poświęcenia części zdolności skryptu do dynamiki w celu poprawy wydajności. Na przykład Tamarin-maszyna wirtualna dla ActionScript, opracowana i udostępniona na licencji Open-Source przez Adobe – posiada obsługę kompilacji just-In-time (JIT) dla określonych klas skryptów.
oprócz wprowadzenia nowych funkcji, w edycji 4 zaproponowano poprawienie niektórych błędów ES3. Poprawki te i inne oraz wsparcie dla kodowania/dekodowania JSON zostały złożone w specyfikacji ECMAScript, 5th Edition.,
prace nad edycją 4 rozpoczęły się po zakończeniu specyfikacji ES-CP (Compact Profile) i trwały przez około 18 miesięcy, gdzie poczyniono powolne postępy w równoważeniu teorii specyfikacji JavaScript 2 Netscape z doświadczeniem implementacji JScript .NET firmy Microsoft. po pewnym czasie skupiono się na standardzie ECMAScript for XML (E4X). Aktualizacja nie obyła się bez kontrowersji. Pod koniec 2007 roku debata pomiędzy Eich, późniejszym CTO Fundacji Mozilli, a Chrisem Wilsonem, architektem platformy Microsoft dla Internet Explorera, stała się Publiczna na wielu blogach., Wilson ostrzegł, że ponieważ proponowane zmiany w ECMAScript czyniły go wstecznie niezgodnym pod pewnymi względami z wcześniejszymi wersjami języka, aktualizacja oznaczała „przełamanie sieci”, a zainteresowane strony, które sprzeciwiały się zmianom, były „ukryte przed wzrokiem”. Eich odpowiedział, że Wilson zdawał się” powtarzać fałszerze w blogach ” i zaprzeczył, że próbowano stłumić sprzeciw i zakwestionował krytykę, aby podać konkretne przykłady niezgodności., Zwrócił uwagę, że Microsoft Silverlight i Adobe AIR polegają odpowiednio na C# i ActionScript 3, z których oba są większe i bardziej złożone niż ECMAScript Edition 3.
5th EditionEdit
Yahoo, Microsoft, Google i inni dysydenci czwartej edycji utworzyli własną podkomisję, aby zaprojektować mniej ambitną aktualizację ECMAScript 3, Wstępnie nazwaną ECMAScript 3.1. Ta edycja skupiłaby się na bezpieczeństwie i aktualizacjach bibliotek, z dużym naciskiem na kompatybilność. Po wspomnianym publicznym sparingu, ECMAScript 3.,Zespoły 1 i ECMAScript 4 zgodziły się na kompromis: obie edycje będą prowadzone równolegle z koordynacją między zespołami, aby zapewnić, że ECMAScript 3.1 pozostanie ścisłym podzbiorem ECMAScript 4 zarówno pod względem semantyki, jak i składni.
jednak różne filozofie w każdym zespole powodowały powtarzające się łamanie zasady podzbioru i pozostawało wątpliwe, czy dysydenci ECMAScript 4 kiedykolwiek będą wspierać lub wdrażać ECMAScript 4 w przyszłości., Po ponad roku od braku porozumienia co do przyszłości ECMAScript w ramach Komitetu Technicznego Ecma 39, oba zespoły osiągnęły nowy kompromis w lipcu 2008 roku: Brendan Eich ogłosił, że Ecma tc39 skupi się na projekcie ECMAScript 3.1 (później przemianowanym na ECMAScript, 5th Edition) przy pełnej współpracy wszystkich stron, a dostawcy będą docelowo co najmniej dwoma interoperacyjnymi implementacjami na początku 2009 roku. W kwietniu 2009 roku Ecma tc39 opublikowała „ostateczny” projekt piątej edycji i ogłosiła, że testy interoperacyjnych implementacji mają zostać zakończone do połowy lipca., 3 grudnia 2009 roku ukazała się 5 edycja ECMA-262.
6.edycja – ECMAScript 2015Edit
6. edycja, początkowo znana jako ECMAScript 6 (ES6), później przemianowana na ECMAScript 2015, została sfinalizowana w czerwcu 2015 roku. Ta aktualizacja dodaje nową składnię do pisania złożonych aplikacji, w tym deklaracji klas (class Foo { ... }
), modułów ES6, takich jak import * as moduleName from "..."; export const Foo
, ale definiuje je semantycznie na tych samych warunkach, co tryb ścisły ECMAScript 5., Inne nowe funkcje obejmują Iteratory i for...of
pętle, generatory w stylu Pythona, wyrażenie funkcji strzałek (() => {...}
), let
słowo kluczowe dla lokalnych deklaracji, const
słowo kluczowe dla stałych lokalnych deklaracji, dane, typowane tablice, nowe kolekcje (mapy, zestawy i WeakMap), obietnice, ulepszenia liczb i matematyki, odbicie, proxy (Metaprogramowanie dla obiektów wirtualnych i owijarek) i literały szablonów dla ciągów. Pełna lista jest obszerna., Jako pierwsza Specyfikacja ” ECMAScript Harmony „znana jest również jako” ES6 Harmony.”
7.edycja – ECMAScript 2016Edit
7. edycja, oficjalnie znana jako ECMAScript 2016, została sfinalizowana w czerwcu 2016 roku. Jego funkcje obejmują przedział bloków zmiennych i funkcji, Schematy destrukcji (zmiennych), właściwe wywołania ogonowe, operator wykładniczy **
dla liczb, await
, async
słowa kluczowe do programowania asynchronicznego, oraz array.prototyp.zawiera funkcję
.,
operator wykładniczy jest odpowiednikiem Matematyka.pow
, ale zapewnia prostszą składnię podobną do języków takich jak Python, F#, Perl i Ruby.async
/ został okrzyknięty łatwiejszym sposobem użycia i opracowania kodu asynchronicznego.
ósma edycja – ECMAScript 2017Edit
ósma edycja, oficjalnie znana jako ECMAScript 2017, została sfinalizowana w czerwcu 2017 roku. Jego funkcje obejmują obiekt .wartości
,obiekt.,wpisy
Iobiekt.getOwnPropertyDescriptors
funkcje ułatwiające manipulowanie obiektami,async/await
konstrukcje wykorzystujące generatory i obietnice oraz dodatkowe funkcje dla współbieżności i atomiki.
9.edycja – ECMAScript 2018Edit
9. edycja, oficjalnie znana jako ECMAScript 2018, została sfinalizowana w czerwcu 2018 roku. Nowe funkcje obejmują operatory rest/spread dla literałów obiektów (trzy kropki: ...identifier
), iterację asynchroniczną, Promise.prototype.finally
i Dodatki do wyrażenia regularnego.,
operator spread pozwala na łatwe kopiowanie właściwości obiektu, jak pokazano poniżej.
10.edycja – ECMAScript 2019edytuj
10. edycja, oficjalnie znana jako ECMAScript 2019, została opublikowana w czerwcu 2019 roku. Dodano funkcje, ale nie są ograniczone do Array.prototype.flat
,Array.prototype.flatMap
, zmiany naArray.sort
IObject.fromEntries
.
Array.sortowanie
jest teraz gwarantowane jako stabilne, co oznacza, że elementy o tym samym priorytecie sortowania będą wyświetlane w tej samej kolejności w sortowanej tablicy., Array.prototype.flat(depth=1)
spłaszcza tablicę do określonej głębokości, co oznacza, że wszystkie elementy podrzędne (do określonej głębokości) są konkatenowane rekurencyjnie.
jedenasta edycja – ECMAScript 2020Edit
jedenasta edycja, oficjalnie znana jako ECMAScript 2020, ukazała się w czerwcu 2020 roku. Oprócz nowych funkcji, Ta wersja zawieraBigInt
prymitywny typ dla liczb całkowitych o dowolnych rozmiarach, zerowy operator koalescencyjny i obiekt globalThis.,
Biginty są tworzone albo za pomocą konstruktoraBigInt
lub za pomocą składni10N
, gdzie „n” jest umieszczone po literale liczby. Biginty pozwalają na reprezentowanie i manipulowanie liczbami całkowitymi poza .MAX_SAFE_INTEGER
, podczas gdy liczby są reprezentowane przez podwójną precyzję 64-bitową wartość IEEE 754., Funkcje wbudowane wMath
nie są kompatybilne z Bigintami; na przykład, wykładnictwo BigInts musi być wykonane za pomocą operatora **
zamiast Math.pow
.
zerowy operator koalescencyjny,??
, zwraca operand po prawej stronie, gdy jego lewa strona jestnull
lubundefined
., To kontrastuje z operatorem||
, który zwraca „string” dla wszystkich przykładów.
false ?? "string" // -> falseNaN ?? "string" // -> NaNundefined ?? "string" // -> "string"
opcjonalne łańcuchowanie umożliwia dostęp do zagnieżdżonych węzłów w obiekcie bez konieczności sprawdzania i sprawdzania na każdym poziomie.
przykładem jest const zipcode = person?.adres?.zipcode
. Jeśli którakolwiek z właściwości nie jest obecna, kod zipcode
będzie niezdefiniowany
.
ES.NextEdit
ES.,Next to dynamiczna nazwa, która odnosi się do każdej kolejnej wersji w momencie pisania. ES.Kolejne funkcje to gotowe propozycje (aka „wnioski etapu 4”) wymienione w gotowym wniosku, które nie są częścią ratyfikowanej specyfikacji. Komitet językowy stosuje model „living spec”, więc te zmiany są częścią standardu, a ratyfikacja jest formalnością.