wprowadzenie
ECMAScript 6, znany również jako ECMAScript 2015, jest najnowszą wersją standardu ECMAScript. ES6 jest znaczącą aktualizacją języka i pierwszą aktualizacją języka od czasu standaryzacji ES5 w 2009 roku. Implementacja tych funkcji w głównych silnikach JavaScript jest obecnie w toku.
pełna specyfikacja języka ECMAScript 6 znajduje się w standardzie ES6.,
ES6 zawiera następujące nowe funkcje:
- strzałki
- Klasy
- rozszerzone literały obiektów
- ciągi szablonów
- destrukcja
- default + rest + spread
- let + const
- Iteratory + for..,
- Generatory
- unicode
- Moduły
- Ładowarki modułów
- map + set + weakmap + weakset
- proxy
- symbole
- wbudowane podklasowalne
- obietnice
- math + number + string + array + object API
- literały binarne i ósemkoweli
- reflect API
- Tail calls
ECMAScript 6 features
Arrows
arrows are a function shorthand using the =>syntax. Są one składniowo podobne do pokrewnych funkcji w C#, Java 8 i CoffeeScript., Obsługują zarówno bloki instrukcji, jak i ciała wyrażeń, które zwracają wartość wyrażenia. W przeciwieństwie do funkcji, strzałki mają ten sam kod leksykalny this, co ich otaczający kod.
Więcej informacji: MDN Arrow Functions
Classes
ES6 classes are a simple sugar over the prototype-based oo pattern. Posiadanie jednej wygodnej formy deklaratywnej sprawia, że wzorce klas są łatwiejsze w użyciu i zachęca do interoperacyjności. Klasy obsługują dziedziczenie oparte na prototypach, super wywołania, instancje oraz statyczne metody i konstruktory.,
Więcej informacji: klasy MDN
Rozszerzone literały obiektów
literały obiektów są rozszerzone, aby wspierać ustawianie prototypu przy budowie, skróty dlafoo: foo przypisywanie, definiowanie metod, wykonywanie super połączeń i obliczanie nazw właściwości za pomocą wyrażeń. Razem, zbliżają one również literały obiektów i deklaracje klas do siebie i pozwalają projektowi obiektowemu korzystać z niektórych z tych samych udogodnień.,
Więcej informacji: MDN Gramatyka i typy: literały obiektowe
ciągi szablonów
ciągi szablonów dostarczają cukru składniowego do konstruowania ciągów. Jest to podobne do funkcji interpolacji łańcuchów w Perlu, Pythonie i innych. Opcjonalnie można dodać znacznik, aby umożliwić dostosowanie konstrukcji łańcuchów, unikając ataków iniekcyjnych lub konstruowania struktur danych wyższego poziomu z zawartości łańcuchów.
Więcej informacji: ciągi szablonów MDN
destrukcja
destrukcja umożliwia wiązanie za pomocą dopasowania wzorców, z obsługą dopasowywania tablic i obiektów., Destrukcja jest miękka, podobna do standardowego wyszukiwania obiektów foo, generując undefined wartości, gdy nie zostały znalezione.
Więcej informacji: przypisanie destrukcji MDN
Default + Rest + Spread
Callee-obliczane domyślne wartości parametrów. Zamienia tablicę w kolejne argumenty w wywołaniu funkcji. Bind końcowe parametry do tablicy. Rest zastępuje potrzebę arguments I rozwiązuje typowe przypadki bardziej bezpośrednio.,
function f(x, y=12) { // y is 12 if not passed (or passed as undefined) return x + y;}f(3) == 15
function f(x, ...y) { // y is an Array return x * y.length;}f(3, "hello", true) == 6
function f(x, y, z) { return x + y + z;}// Pass each elem of array as argumentf(...) == 6
More MDN info: Default parameters, Rest parameters, Spread Operator
Let + Const
Block-scoped binding constructs. let is the new var. const is single-assignment. Static restrictions prevent use before assignment.
function f() { { let x; { // okay, block scoped name const x = "sneaky"; // error, const x = "foo"; } // error, already declared in block let x = "inner"; }}
More MDN info: let statement, const statement
Iterators + For..,Z
Obiekty iteratora umożliwiają iterację niestandardową, jak CLR IEnumerable lub Java Iterable. Generalizuj for..indo niestandardowej iteracji opartej na iteratorze za pomocą for..of. Nie wymaga realizacji tablicy, umożliwiając leniwe wzorce projektowe, takie jak LINQ.
iteracja jest oparta na interfejsach typu kaczka (tylko dla ekspozycji używa składni typu TypeScript):
Więcej informacji: MDN for…z
Generatory
Generatory upraszczają tworzenie iteratorów za pomocą function*I yield., Funkcja zadeklarowana jako funkcja * zwraca instancję generatora. Generatory są podtypami iteratorów, które zawierają dodatkowe next I throw. Te umożliwiają przepływ wartości z powrotem do generatora, więc yield jest formą wyrażenia, która zwraca wartość (lub rzuca).
Uwaga: Może być również używany do włączania programowania asynchronicznego typu 'wait', patrz także propozycja ES7 await.,
interfejs generatora jest (przy użyciu składni typu TypeScript tylko dla ekspozycji):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any);}
Więcej informacji: protokoły iteracji MDN
Unicode
niełamliwe dodatki do obsługi pełnego Unicode, w tym nowy literal Unicode w ciągach i nowe wyrażenia regularneu Tryb obsługi punktów kodu, a także nowe API do przetwarzania ciągów na poziomie 21-bitowych punktów kodu. Dodatki te wspierają budowanie globalnych aplikacji w JavaScript.
Więcej informacji: MDN RegExp.prototyp.,unicode
Moduły
obsługa modułów na poziomie języka do definiowania komponentów. Koduje wzorce z popularnych loaderów modułów JavaScript (AMD, CommonJS). Zachowanie środowiska pracy zdefiniowane przez domyślny program ładujący zdefiniowany przez hosta. Domyślnie model asynchroniczny – żaden kod nie jest wykonywany, dopóki żądane Moduły nie będą dostępne i przetworzone.,v>
niektóre dodatkowe funkcje obejmują export default I export *:
// lib/mathplusplus.jsexport * from "lib/math";export var e = 2.71828182846;export default function(x) { return Math.log(x);}
// app.jsimport ln, {pi, e} from "lib/mathplusplus";alert("2π = " + ln(e)*pi*2);
Więcej MDN info: Instrukcja importu, Instrukcja eksportu
Ładowarki modułów
obsługa ładowarek modułów:
- dynamiczne ładowanie
- izolacja stanu
- izolacja globalnej przestrzeni nazw
- haki kompilacji
- wirtualizacja zagnieżdżona
domyślna ładowarka modułów może być skonfigurowana, a nowe ładowarki mogą być konstruowane do oceny i ładowania kodu w izolowanych lub ograniczonych kontekstach.,
Map + Set + WeakMap + WeakSet
wydajne struktury danych dla popularnych algorytmów. WeakMaps zapewnia nieszczelne tabele boczne z kluczem obiektowym.
Więcej MDN info: Map, Set, WeakMap, WeakSet
Proxy
proxy umożliwiają tworzenie obiektów z pełnym zakresem zachowań dostępnych dla obiektów hosta. Może być stosowany do przechwytywania, wirtualizacji obiektów, logowania/profilowania, itp.
dla wszystkich meta-operacji na poziomie runtime dostępne są pułapki:
Więcej informacji: MDN Proxy
Symbole
Symbole umożliwiają kontrolę dostępu dla stanu obiektu., Symbole pozwalają na modyfikowanie właściwości przez string(jak w ES5) lub symbol. Symbole to nowy, prymitywny Typ. Opcjonalnydescription parametr używany w debugowaniu – ale nie jest częścią tożsamości. Symbole są unikalne (jak gensym), ale nie prywatne, ponieważ są eksponowane za pomocą funkcji odbicia, takich jak Object.getOwnPropertySymbols.
Więcej informacji: symbol MDN
wbudowane Podklasowalne
w ES6, wbudowane, takie jakArray,Date I DOMElements mogą być podklasowane.,
budowa obiektu dla funkcji o nazwie Ctor używa teraz dwóch faz (obie praktycznie wysłane):
- wywołaj
Ctoraby przydzielić obiekt, instalując dowolne specjalne zachowanie - wywołaj konstruktor na nowej instancji, aby zainicjować
znany @@create symbol jest dostępny poprzez Symbol.create. Wbudowane teraz ujawniają swoje@@create jawnie.,
Math + Number + String + Array + Object API
wiele nowych bibliotek, w tym podstawowe biblioteki Matematyczne, pomocniki konwersji tablic, pomocniki łańcuchów i obiekt.przypisanie do kopiowania.
Więcej informacji MDN: Liczba, Matematyka, tablica.od, Array.of, Array.prototyp.copyWithin, Object.przypisanie
literały binarne i ósemkowe
dwie nowe literały numeryczne są dodawane dla binarnych (b) I ósemkowych (o).
0b111110111 === 503 // true0o767 === 503 // true
Promises
Promises to biblioteka do programowania asynchronicznego., Obietnice są pierwszorzędną reprezentacją wartości, która może być udostępniona w przyszłości. Obietnice są używane w wielu istniejących bibliotekach JavaScript.
Więcej informacji: MDN Promise
Reflect API
Full reflect API pokazujące meta-operacje na obiektach na poziomie runtime. W rzeczywistości jest to odwrotność API Proxy i umożliwia wykonywanie wywołań odpowiadających tym samym meta-operacjom, co pułapki proxy. Szczególnie przydatne przy implementacji proxy.,
// No sample yet
Więcej informacji: MDN Reflect
wywołania ogonowe
wywołania w pozycji ogonowej są gwarantowane, że nie będą rosły w sposób niezwojony. Sprawia, że algorytmy rekurencyjne są bezpieczne w obliczu nieograniczonych wejść.