ECMAScript 2017
ECMAScript 2017, znany także jako ES2017 lub ES8, jest ósmą rocznicową edycją specyfikacji języka programowania JavaScript opublikowaną przez ECMA International w czerwcu 2017 roku. Specyfikacja jest częścią serii standardów ECMAScript definiujących składnię i semantykę języka.
Historia i kontekst
Po wprowadzeniu ECMAScript 2016 (ES7) w 2016 roku, prace nad następną edycją odbywały się w ramach TC39 – grupy technicznej ECMA odpowiedzialnej za rozwój języka. Wersja 2017 została zatwierdzona w 2017 roku i stała się pierwszym standardem, który w pełni wspierał asynchroniczny kod przy użyciu słowa kluczowego await w funkcjach oznaczonych jako async.
Główne nowości
- Async/Await – uzupełnienie istniejących obietnic (Promise). Pozwala na zapisanie kodu asynchronicznego w sposób bardziej czytelny i sekwencyjny. Przykład:
async function fetchData() { const response = await fetch(url); const data = await response.json(); return data; } - Object.entries() i Object.values() – metody umożliwiające pobranie odpowiednio par
[klucz, wartość]oraz samych wartości z obiektu. Ułatwiają iterację przy użyciu for…of lub Map. - String padding – metody
String.prototype.padStartiString.prototype.padEndsłużące do wypełniania łańcucha znaków określonym znakiem do zadanej długości. - Trailing commas w listach argumentów funkcji – możliwość umieszczania dodatkowego przecinka po ostatnim argumencie przy definicji i wywołaniu funkcji, co ułatwia refaktoryzację kodu.
- SharedArrayBuffer i Atomics – wprowadzenie dodatkowych funkcji synchronizacji dla współdzielonej pamięci w kontekście Web Workers, przyczyniających się do bezpieczniejszego wykorzystania wielowątkowości w przeglądarkach.
Kompatybilność i implementacje
ECMAScript 2017 jest wspierany przez wszystkie nowoczesne silniki JavaScript, w tym:
- V8 (Chromium, Node.js)
- SpiderMonkey (Mozilla Firefox)
- JavaScriptCore (Apple Safari)
- Chakra (Microsoft Edge Legacy)
W praktyce wiele funkcji, takich jak Object.entries, Object.values i String.padStart, były dostępne już w przeglądarkach przed oficjalnym wydaniem, ale dopiero publikacja ES2017 ujednoliciła ich specyfikację.
Znaczenie w ekosystemie
Wprowadzenie async/await uznawane jest za jedną z najważniejszych zmian w historii języka, znacznie upraszczając obsługę operacji asynchronicznych, które wcześniej wymagały zagnieżdżonych obietnic lub tzw. „callback hell”. Dzięki temu, biblioteki i frameworki typu React, Angular czy Node.js mogły przyjąć bardziej deklaratywny styl programowania.
Przykładowy kod
// ES2017 – użycie async/await oraz Object.entries
async function processUsers(users) {
for (const [index, user] of Object.entries(users)) {
const details = await fetch(`/api/user/${user.id}`);
console.log(`User #${Number(index) + 1}:`, await details.json());
}
}
// padStart i padEnd
const number = '7';
console.log(number.padStart(3, '0')); // "007"
console.log(number.padEnd(5, '*')); // "7****"
Powiązane artykuły
- ECMAScript – ogólna historia i struktura standardu.
- ECMAScript 2018 – kolejna edycja wprowadzająca np.
Promise.finallyi rozbudowane wyrażenia regularne. - Async/Await – szczegółowy opis mechanizmu asynchronicznego.
- Promise – podstawa asynchronicznego programowania w JavaScript.
- Object.entries i Object.values.
Bibliografia
- ECMA‑262, ECMAScript 2017 Language Specification, ECMA International, 2017.
- MDN Web Docs – dokumentacja funkcji
async,await,Object.entriesi innych (wewnętrzne źródło encyklopedyczne).