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