Was ist neu in JavaScript ES2019?

Es gibt ein Standardverfahren für die neuesten Versionen von Javascript und dahinter steht ein ganzes Komitee. In diesem Artikel werde ich darüber sprechen, wer Entscheidungen über eine neue Spezifikation trifft, wie das Verfahren dafür ist und was in ES2019 neu ist .

Bild

Die Sprachspezifikation, die JavaScript steuert, heißt ECMAScript . Es gibt eine Gruppe namens Technical Committee 39 [TC39] , die jede Spezifikation vor ihrer Annahme überprüft.

Jede Änderung erfolgt schrittweise:

  • Stufe 0: Ideen
  • Stufe 1: Angebote
  • Stufe 2: Entwürfe
  • Stufe 3: Kandidaten
  • Stufe 4: Fertigstellung / Genehmigung

Eine Funktion, die Stufe 4 erreicht, ist wahrscheinlich Teil der Sprachspezifikation.

Überlegen Sie, was gemäß ES2019 zur Spezifikation hinzugefügt wird.

Array.prototype. {Flat, flatMap}


Mit Array.prototype.flat () können Sie Arrays rekursiv bis zu einer bestimmten Tiefe glätten und ein neues Array zurückgeben.

Syntax: Array.prototype.flat (Tiefe)
Tiefe - Der Standardwert ist 1. Verwenden Sie Infinity , um alle verschachtelten Arrays zu glätten.

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 richtet das Ergebnis an einem neuen Array aus. Dies ist identisch mit der Kartenoperation , gefolgt von einer flachen Tiefe von 1.

Syntax: Array.prototype.flatMap (Rückruf)
Rückruf: Eine Funktion , die das Element eines neuen Arrays erzeugt.

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

Object.fromEntries


Object.fromEntries macht das Gegenteil von Object.entries. Es konvertiert eine Liste von Schlüssel-Wert-Paaren in ein Objekt.

Syntax: Object.fromEntries (iterierbar)
Iteration: Iteration als Array- oder Map- Objekte, die das iterierbare 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 am Zeilenanfang und trimEnd () entfernt Leerzeichen am Zeilenende.

 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 catch- Anweisung 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 Fehlerbehandlung zu berücksichtigen.

Es gibt Zeiten, in denen Sie einen möglichen Fehler kennen, der bei der Ausführung von Vorgängen auftreten kann. Und Sie können die Fangbehandlung ignorieren.

JSON ⊂ ECMAScript


Zeilentrennzeichen (U + 2028) und Absatztrennzeichen (U + 2029) sind jetzt in Zeichenfolgenliteralen zulässig. Zuvor wurden sie als Zeichenfolgenabschlusszeichen betrachtet und lösten SyntaxError- Ausnahmen aus.

 // 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 mithilfe von JSON-Escape-Sequenzen.

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

Function.prototype.toString


.toString () gibt jetzt exakte Ausschnitte des Quellcodes 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


Eine schreibgeschützte Eigenschaft, die eine optionale Beschreibung des Symbolobjekts zurückgibt:

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

Fazit


Es gibt viele andere interessante Dinge, wie statische und private Methoden und Felder in Klassen, Legacy RegEx usw. Für den Entwickler ist es wichtig, die Entstehung neuer Technologien zu überwachen, alte zu verbessern und diese in der Arbeit einzusetzen.

Es ist hilfreich, frühere Versionen zu lesen: ES2015 ES2016 ES2017 ES2018

Source: https://habr.com/ru/post/de439532/


All Articles