Dieses Buch handelt von ECMAScript 6 (dessen offizieller Name ECMAScript 2015 ist), einer neuen Version von JavaScript.
Um dieses Buch zu verstehen, sollten Sie bereits JavaScript kennen. Wenn nicht: mein anderes Buch „Speaking JavaScript“ ist kostenlos online verfügbar und bringt Programmierern alles über JavaScript (bis einschließlich ECMAScript 5) bei.
Dieses Buch behandelt ES6 mit drei Detailstufen
Weitere Dinge, die Sie wissen sollten
Ich begann mit dem Schreiben dieses Buches lange bevor es Implementierungen von ES6-Funktionen gab, was recht umfangreiche Recherchen erforderte. Wesentliche Quellen waren
ECMAScript 5 führte Sprachmodi ein: Strict Mode macht JavaScript zu einer saubereren Sprache, indem seine Semantik geändert, mehr Prüfungen durchgeführt und mehr Ausnahmen ausgelöst werden. Konsultieren Sie Abschnitt „Strict Mode“ in „Speaking JavaScript“ für weitere Informationen. Der Legacy-/Standardmodus wird non-strict mode oder sloppy mode genannt.
Strict Mode wird über die folgende Zeile eingeschaltet (die in ECMAScript-Versionen vor ES5 keine Wirkung hat)
'use strict';
Wenn Sie diese Zeile an den Anfang einer Datei setzen, befindet sich der gesamte Code darin im Strict Mode. Wenn Sie diese Zeile zur ersten Zeile einer Funktion machen, befindet sich nur diese Funktion im Strict Mode.
Die Verwendung einer Direktive zum Einschalten von Strict Mode ist nicht sehr benutzerfreundlich und war einer der Gründe, warum Strict Mode in ES5 nicht annähernd so beliebt war, wie er sein sollte. ES6-Module und -Klassen befinden sich jedoch implizit im Strict Mode. Da die meisten ES6-Codes in Modulen leben werden, wird Strict Mode zum De-facto-Standard für ES6.
Der Begriff Protokoll hat in der Informatik verschiedene Bedeutungen. Im Kontext von Programmiersprachen und API-Design verwende ich ihn wie folgt
Ein Protokoll definiert Schnittstellen (Signaturen für Methoden und/oder Funktionen) und Regeln für deren Verwendung.
Die Idee ist, festzulegen, wie ein Dienst erbracht werden soll. Dann kann jeder den Dienst erbringen und jeder kann ihn anfordern, und es ist garantiert, dass sie gut zusammenarbeiten.
Beachten Sie, dass sich die hier gegebene Definition von der Betrachtung eines Protokolls als Schnittstelle (wie z. B. in Objective C) unterscheidet, da diese Definition Regeln enthält.
Bei einem Methodenaufruf obj.m(···) ist obj der Empfänger des Methodenaufrufs und über this innerhalb der Methode zugänglich.
Die (Typen-)Signatur einer Funktion beschreibt, wie die Funktion aufgerufen wird, was ihre Eingaben und Ausgaben sind. Ich verwende in diesem Buch die von Microsoft TypeScript und Facebook Flow etablierte Syntax. Ein Beispiel für eine Signatur
parseInt(string : string, radix? : number) : number
Sie sehen, dass parseInt() einen String und eine Zahl erwartet und eine Zahl zurückgibt. Wenn der Typ eines Parameters klar ist, lasse ich die Typannotation oft weg.
Die ES6-Sprachspezifikation verwendet interne Slots, um interne Daten zu speichern. In der Spezifikation werden interne Slots wie Eigenschaften behandelt, deren Namen in eckigen Klammern stehen
O.[[GetPrototypeOf]]()
Zwei Dinge unterscheiden sie von Eigenschaften
[[Prototype]]. Der Wert dieses Slots kann nicht direkt über JavaScript gelesen werden, aber Sie können Object.getPrototypeOf() verwenden, um dies zu tun.Wie genau interne Slots gespeichert werden, bleibt unbezeichnet. Einige existieren in tatsächlichen JavaScript-Implementierungen möglicherweise nicht einmal.
Die ECMAScript-Spezifikation verwendet eine Datenstruktur namens Umgebung, um die Variablen eines Scopes zu speichern. Eine Umgebung ist im Grunde ein Wörterbuch, das Variablennamen auf Werte abbildet. Ein Binding ist ein Eintrag in einer Umgebung, Speicherplatz für eine Variable.
Destruktive Operationen (Methoden, Funktionen) ändern ihre Parameter oder ihre Empfänger. Zum Beispiel modifiziert push() seinen Empfänger arr
> const arr = ['a', 'b'];
> arr.push('c')
3
> arr
[ 'a', 'b', 'c' ]
Im Gegensatz dazu erstellt concat() ein neues Array und verändert seinen Empfänger arr nicht
> const arr = ['a', 'b'];
> arr.concat(['c'])
[ 'a', 'b', 'c' ]
> arr
[ 'a', 'b' ]
Die API einer Klasse C wird normalerweise wie folgt dokumentiert
C KonstruktorC-MethodenC.prototype-MethodenIm Englischen schreibe ich JavaScript-Begriffe wie folgt groß
String: seine Mitglieder sind Objekte, Instanzen von String.string: seine Mitglieder sind primitive Werte, Strings.map().Mehrere Repositories auf GitHub enthalten Code, der in diesem Buch gezeigt wird
async-examplesbabel-on-nodedemo_promisegenerator-examplesnode-es6-demopromise-exampleswebpack-es6-demoRandspalten sind Textkästen, die mit Symbolen gekennzeichnet sind. Sie ergänzen den normalen Inhalt.
Gelegentlich verweise ich über Fußnoten auf (öffentlich verfügbare) externe Materialien. Zwei Quellen werden mit einem Präfix in eckigen Klammern gekennzeichnet