Einführung
ECMAScript 6, auch bekannt als ECMAScript 2015, ist die neueste Version des ECMAScript-Standards. ES6 ist ein bedeutendes Update der Sprache, und das erste Update der Sprache seit ES5 wurde 2009 standardisiert. Die Implementierung dieser Funktionen in großen JavaScript-Engines ist jetzt im Gange.
Die vollständige Spezifikation der ECMAScript 6-Sprache finden Sie im ES6-Standard.,
ES6 enthält die folgenden neuen Funktionen:
- Pfeile
- Klassen
- erweiterte Objektliterale
- Vorlagenzeichenfolgen
- Destrukturierung
- default + rest + spread
- let + const
- Iteratoren + for..,
- Generatoren
- unicode
- Module
- Modullader
- map + set + weakmap + weakset
- proxies
- symbole
- unterklassifizierbare Built-Ins
- Versprechen
- math + number + string + array + object APIs
- binäre und oktale Literale
- reflect api
- tail calls
ECMAScript 6 Features
Arrows
Arrows are a function shorthand using the =>
syntax. Sie ähneln syntaktisch der zugehörigen Funktion in C#, Java 8 und CoffeeScript., Sie unterstützen sowohl Anweisungsblockkörper als auch Ausdruckskörper, die den Wert des Ausdrucks zurückgeben. Im Gegensatz zu Funktionen teilen Pfeile das gleiche lexikalische this
wie ihr umgebender Code.
Weitere Informationen: MDN-Pfeilfunktionen
Klassen
ES6-Klassen sind ein einfacher Zucker über das prototypbasierte OO-Muster. Ein einziges praktisches deklaratives Formular erleichtert die Verwendung von Klassenmustern und fördert die Interoperabilität. Klassen unterstützen prototypenbasierte Vererbung, Superaufrufe, Instanzmethoden und statische Methoden und Konstruktoren.,
Weitere Informationen: MDN-Klassen
Erweiterte Objektliterale
Objektliterale werden erweitert, um das Festlegen des Prototyps bei der Konstruktion, die Abkürzung für foo: foo
– Zuweisungen, das Definieren von Methoden, das Tätigen von Superaufrufen und das Berechnen von Eigenschaftsnamen mit Ausdrücken zu unterstützen. Zusammen bringen diese auch Objektliterale und Klassendeklarationen näher zusammen und lassen objektbasiertes Design von einigen der gleichen Annehmlichkeiten profitieren.,
Weitere Informationen: MDN-Grammatik und-typen: Objektliterale
Vorlagenzeichenfolgen
Vorlagenzeichenfolgen bieten syntaktischen Zucker zum Erstellen von Zeichenfolgen. Dies ähnelt den Zeichenfolgeninterpolationsfunktionen in Perl, Python und mehr. Optional kann ein Tag hinzugefügt werden, um die Anpassung der Zeichenfolgenkonstruktion zu ermöglichen, um Injektionsangriffe zu vermeiden oder Datenstrukturen höherer Ebene aus Zeichenfolgeninhalten zu erstellen.
Weitere Informationen: MDN-Vorlagenzeichenfolgen
Destructuring
Destructuring ermöglicht die Bindung mithilfe des Mustervergleichs mit Unterstützung für übereinstimmende Arrays und Objekte., Destructuring ist fail-weich, ähnlich wie standard-Objekt-lookup foo
produzieren undefined
Werte, wenn nicht gefunden.
Mehr Infos: MDN Destructuring assignment
Standard + Rest + Verbreitung
Angerufene-bewertet die Standardwerte der parameter. Verwandeln Sie ein Array in aufeinanderfolgende Argumente in einem Funktionsaufruf. Binden Sie nachfolgende Parameter an ein Array. Rest ersetzt die Notwendigkeit von arguments
und adressiert häufige Fälle direkter.,
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..,Von
Iterator-Objekte ermöglichen benutzerdefinierte iteration wie CLR IEnumerable-oder Java Iterierbar. Verallgemeinern Sie for..in
zu einer benutzerdefinierten iteratorbasierten Iteration mit for..of
. Sie müssen kein Array realisieren und faule Entwurfsmuster wie LINQ aktivieren.
Die Iteration basiert auf diesen duck-typisierten Schnittstellen (nur mit TypeScript – Typsyntax für Exposition):
Weitere Informationen: MDN für…von
Generatoren
Generatoren vereinfachen die Iteratorerstellung mit function*
und yield
., Eine als function * deklarierte Funktion gibt eine Generatorinstanz zurück. Generatoren sind Untertypen von Iteratoren, die zusätzliche next
und throw
. Diese ermöglichen es Werten, zurück in den Generator zu fließen, daher ist yield
ein Ausdrucksformular, das einen Wert zurückgibt (oder wirft).
Hinweis: Kann auch verwendet werden, um ‚await‘-ähnliche asynchrone Programmierung zu aktivieren, siehe auch ES7 await
Vorschlag.,
Die Generatorschnittstelle ist (nur mit TypeScript-Typsyntax für Exposition):
interface Generator extends Iterator { next(value?: any): IteratorResult; throw(exception: any);}
Weitere Informationen: MDN-Iterationsprotokolle
Unicode
Nicht unterbrechende Ergänzungen zur Unterstützung des vollständigen Unicode, einschließlich neuer Unicode-Literalform in Strings und neuer RegExp u
Modus zur Behandlung von Codepunkten sowie neuer RegExp u
Weitere Informationen: MDN RegExp.Prototyp.,unicode
Module
Unterstützung auf Sprachebene für Module zur Komponentendefinition. Kodifiziert Muster von gängigen JavaScript-Modulladern (AMD, CommonJS). Laufzeitverhalten, das von einem hostdefinierten Standardlader definiert wird. Implizit asynchrones Modell – Kein Code wird ausgeführt, bis die angeforderten Module verfügbar und verarbeitet sind.,v>
Einige zusätzliche Funktionen umfassen export default
und 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);
Weitere MDN-Informationen: Importanweisung, Exportanweisung
Modullader unterstützung für h3>
Modullader:
- Dynamisches Laden
- Zustandsisolierung
- Globale Namespace-Isolation
- Kompilierungs-Hooks
- Verschachtelte Virtualisierung
Der Standard-Modullader kann konfiguriert werden, und neue Loader können erstellt werden, um Code in isolierten oder eingeschränkten Kontexten auszuwerten und zu laden.,
Map + Set + WeakMap + WeakSet
Effiziente Datenstrukturen für die gängigen algorithmen. WeakMaps bietet leakfreie Objektschlüssel und Beistelltische.
Weitere MDN-Informationen: Map, Set, WeakMap, WeakSet
Proxies
Proxies ermöglichen die Erstellung von Objekten mit dem gesamten Spektrum der für Hostobjekte verfügbaren Verhaltensweisen. Kann zum Abfangen, Objektvirtualisierung, Protokollieren/Profilieren usw. verwendet werden.
Für alle Metaoperationen auf Laufzeitebene stehen Traps zur Verfügung:
Weitere Informationen: MDN Proxy
Symbole
Symbole aktivieren die Zugriffskontrolle für den Objektstatus., Mit Symbolen können Eigenschaften entweder mit string
(wie in ES5) oder symbol
eingegeben werden. Symbole sind ein neuer primitiver Typ. Optional description
parameter Debuggen verwendet, ist aber nicht Teil der Identität. Symbole sind eindeutig (wie gensym), aber nicht privat, da sie über Reflexionsfunktionen wie Object.getOwnPropertySymbols
verfügbar gemacht werden.
Weitere Informationen: MDN Symbol
Subclassable Built-Ins
In ES6 können Built-Ins wie Array
, Date
und DOM Element
s unterklassifiziert werden.,
Objektkonstruktion für eine Funktion mit dem Namen Ctor
verwendet jetzt zwei Phasen (beide virtuell ausgelöst):
- Rufen Sie
Ctor
auf, um das Objekt zuzuweisen, und installieren Sie ein spezielles Verhalten - Rufen Sie den Konstruktor für eine neue Instanz auf, um
Die bekannte @@create
Symbol ist über Symbol.create
verfügbar. Built-Ins setzen jetzt ihre @@create
explizit frei.,
Math + Nummer + String + Array + – Objekt-APIs
Viele neue Bibliothek Ergänzungen, einschließlich der Kern-Mathematik-Bibliotheken, Array conversion-Helfer, Helfer String und Object.zuweisen zum Kopieren.
Weitere MDN-Informationen: Zahl, Mathematik, Array.aus, Array.der, Array.Prototyp.copyWithin, Objekt.weisen Sie
Binäre und oktale Literale zu
Für binäre (b
) und oktale (o
) werden zwei neue numerische Literalformen hinzugefügt.
0b111110111 === 503 // true0o767 === 503 // true
Verspricht
Versprechen eine Bibliothek für die asynchrone Programmierung., Versprechen sind eine erstklassige Darstellung eines Werts, der in Zukunft verfügbar gemacht werden kann. Versprechen werden in vielen vorhandenen JavaScript-Bibliotheken verwendet.
Weitere Informationen: MDN Promise
Reflect API
Full reflection API, die die Metaoperationen auf Laufzeitebene für Objekte verfügbar macht. Dies ist effektiv die Umkehrung der Proxy-API und ermöglicht Anrufe, die denselben Metaoperationen wie die Proxy-Traps entsprechen. Besonders nützlich für die Implementierung von Proxies.,
// No sample yet
Weitere Informationen: MDN Reflect
Tail Calls
Aufrufe in Tail-Position wachsen den Stapel garantiert nicht unbegrenzt. Macht rekursive Algorithmen angesichts unbegrenzter Eingaben sicher.