Was ist neu in JavaScript ES2019

Ursprünglicher Autor: Vali Shah
Es ist ein Standardverfahren für die neueste Version von Javascript , und dahinter der ganzen Ausschuß. In diesem Artikel werde ich darüber sprechen, wer Entscheidungen über eine neue Spezifikation trifft, wie es geht 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 der Annahme überprüft.

Jede Änderung erfolgt stufenweise:

  • 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 auf eine bestimmte Tiefe glätten und ein neues Array zurückgeben.

Syntax: Array.prototype.flat (depth)
depth - 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 () zeigt jedes Element mithilfe einer Anzeigefunktion an 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: 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 (abzählbaren)
Iteration: Iteration als Array oder Map - Objekt , das Geräte iterable Protokoll .

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}


Mit trimStart () werden Leerzeichen am Zeilenanfang und mit trimEnd () Leerzeichen am Zeilenende entfernt.

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 hat es optional gemacht.

// 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 Behandlung von Fängen ignorieren.

JSON ⊂ ECMAScript


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

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

Wohlgeformte JSON.stringify


Anstelle von ungepaarten Ersatzcodepunkten, die zu einzelnen UTF-16- Codeeinheiten führen, stellt ES10 diese mithilfe von JSON-Escape-Sequenzen dar.

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

Funktionsprototyp.zuString


.toString () gibt jetzt genaue 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.Prototyp.Beschreibung


Eine schreibgeschützte Eigenschaft, die eine optionale Beschreibung des Symbol- Objekts 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 zu nutzen.

Es wird nützlich sein, frühere Versionen zu lesen: ES2015 ES2016 ES2017 ES2018

Jetzt auch beliebt: