Was ist neu in JavaScript ES2019?

Viele von uns wissen, dass es ein Standardverfahren für die neuesten Versionen von Javascript und ein dahinter stehendes Komitee gibt. In diesem Beitrag werde ich erklären, wer bei einer neuen Spezifikation den letzten Aufruf macht, wie das Verfahren dafür ist und was in ES2019 neu ist.

Die Sprachspezifikation, die JavaScript steuert, heißt ECMAScript. Dahinter steht ein Team namens Technical Committee 39 [TC39] , das jede Spezifikation vor der Annahme überprüft .

Jede Veränderung durchläuft einen Prozess mit Reifegraden.

  • Stufe 0: Ideen / Strawman
  • Stufe 1: Vorschläge
  • Stufe 2: Entwürfe
  • Stufe 3: Kandidaten
  • Stufe 4: Fertig / Genehmigt

Eine Funktion, die Stufe 4 erreicht, wird höchstwahrscheinlich Teil der Sprachspezifikation sein.

Lassen Sie uns auf die Dinge eingehen, die neu in die Spezifikation unter ES2019 aufgenommen wurden.

Array.prototype. {Flat, flatMap}

Array.prototype.flat()vorgeschlagen, Arrays rekursiv auf das angegebene zu reduzieren depthund ein neues Array zurückzugeben.

Syntax :Array.prototype.flat(depth)

Tiefe - Standardwert 1 , InfinityZum Reduzieren aller verschachtelten Arrays.

const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6]

Array.prototype.flatMap()Ordnet jedes Element mithilfe einer Zuordnungsfunktion zu und glättet das Ergebnis in ein neues Array. Es ist identisch mit der Kartenoperation, gefolgt von einer flatvon depth1.

Syntax: Array.prototype.flatMap(callback)

Rückruf:function Das erzeugt ein Element des neuen Arrays.

const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6]

Object.fromEntries

Object.fromEntriesführt die Umkehrung von durch Object.entries. Es wandelt eine Liste von Schlüssel-Wert-Paaren in ein Objekt um.

Syntax: Object.fromEntries(iterable)

iterable: Ein iterables Like Arrayoder Mapoder Objekte, die das iterable Protokoll implementieren

const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]];

String.prototype. {TrimStart, trimEnd}

trimStart()Entfernt Leerzeichen vom Anfang einer Zeichenfolge und trimEnd()Leerzeichen vom Ende einer Zeichenfolge.

const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12

Optionale Fangbindung

Vor der neuen Spezifikation musste eine Ausnahmevariable an eine catchKlausel gebunden sein. ES2019 machte es optional.

// Before try { ... } catch(error) { ... } // After try { ... } catch { ... }

Diese Funktion ist nützlich, wenn Sie den Fehler vollständig ignorieren möchten. Es wird empfohlen, die Behandlung eines Fehlers in Betracht zu ziehen.

Es gibt Fälle, in denen Sie den möglichen Fehler kennen, der bei Vorgängen ausgelöst werden kann. Sie können die Behandlung von Fangblöcken ignorieren.

JSON ⊂ ECMAScript

Die Symbole für Zeilentrennzeichen (U + 2028) und Absatztrennzeichen (U + 2029) sind jetzt in Zeichenfolgenliteralen zulässig. Bisher wurden diese als Leitungsterminatoren behandelt und führten zu SyntaxErrorAusnahmen.

// Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"');

Gut geformte JSON.stringify

Anstelle ungepaarter Ersatzcodepunkte, die zu einzelnen UTF-16- Codeeinheiten führen, repräsentiert ES10 diese mit JSON-Escape-Sequenzen.

JSON.stringify('\uD800'); > '" "' JSON.stringify('\uD800'); > '"\\ud800"'

Function.prototype.toString

.toString() Gibt jetzt exakte Teile des Quellcodetextes zurück, einschließlich Leerzeichen und Kommentare.

function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}'

Symbol.prototype.description

Schreibgeschützte Eigenschaft, die die optionale Beschreibung eines SymbolObjekts zurückgibt :

Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined

Fazit

TC39 behält hier alle anstehenden Spezifikationen bei, die sich in Phase> 1 des Prozesses befinden. Als Entwickler ist es wichtig, den Überblick zu behalten. Es gibt viele weitere aufregende Dinge wie statische und private Methoden und Felder in Klassen, Legacy RegE x usw. Hier finden Sie alle neuen Dinge, die sich in der Vorschlagsphase befinden.

code = coffee + developer

Hier sind einige weitere interessante Themen:

  • Ein kurzer Überblick über JavaScript-Symbole
  • Wie man eine Git-Verzweigungsstrategie annimmt
  • Eine Einführung in Git Merge und Git Rebase: Was sie tun und wann sie verwendet werden