encyklopedia.run.place

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.padStart i String.prototype.padEnd sł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:

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

Bibliografia

  1. ECMA‑262, ECMAScript 2017 Language Specification, ECMA International, 2017.
  2. MDN Web Docs – dokumentacja funkcji async, await, Object.entries i innych (wewnętrzne źródło encyklopedyczne).