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..in
do 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 DOMElement
s mogą być podklasowane.,
budowa obiektu dla funkcji o nazwie Ctor
używa teraz dwóch faz (obie praktycznie wysłane):
- wywołaj
Ctor
aby 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ść.