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 .

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