Erwartete neue JavaScript-Funktionen, die Sie kennen sollten

Seit der Veröffentlichung des ECMAScript 2015-Standards (auch ES6 genannt) hat sich JavaScript grundlegend geändert und verbessert. Dies sind sehr gute Nachrichten für alle JS-Entwickler. Außerdem wird jetzt jedes Jahr eine neue Version von ECMAScript veröffentlicht. Vielleicht haben Sie der neuesten Version des Standards, die im Juni 2019 veröffentlicht wurde, nicht viel Aufmerksamkeit geschenkt. Der Autor des Artikels, dessen Übersetzung wir heute veröffentlichen, möchte kurz und bündig über die Neuerungen von JavaScript und darüber berichten, was in der nächsten Version des ECMAScript-Standards zu erwarten ist.



Chancen, deren Vorschläge sich in der dritten Genehmigungsstufe (Stufe 3) befinden, werden hier erwähnt. Dies bedeutet, dass sie wahrscheinlich in der nächsten Version des ECMAScript-Standards erscheinen, dies kann jedoch nicht mit absoluter Sicherheit bestätigt werden. In diesem Repository finden Sie Informationen zu Vorschlägen, die sich in verschiedenen Genehmigungsphasen befinden.

Funktionen ECMAScript 2019 (ES10)


Der ES10-Standard bietet viele neue Funktionen. Hier werden wir nur einige davon betrachten. Nämlich ein paar neue Array-Methoden.

▍ Methode Array.prototype.flat


Mit dieser Methode können Sie Arrays, die andere Arrays enthalten, "flacher" machen und sie auf eine bestimmte Tiefenebene "komprimieren".

const array = [1, 2, [3, 4]]; array.flat(); // [1, 2, 3, 4]; 

Dies ist eine sehr nützliche Funktion, insbesondere in Fällen, in denen Sie mit verschachtelten Arrays arbeiten müssen. Wenn die Verschachtelungstiefe von Arrays in der Datenstruktur 1 überschreitet, kann ein einzelner Aufruf der flat Methode das Array nicht vollständig "flach" machen. Diese Methode akzeptiert eine optionale Parametertiefe, mit der Sie angeben können, um wie viele Verschachtelungsebenen die Dimension des verarbeiteten Arrays reduziert werden soll.

 //   const crazyArray = [1, 2, [3, 4], [[5], [6, [7,8]]]]; crazyArray.flat(Infinity); // [1, 2, 3, 4, 5, 6, 7, 8]; // ,  flat,     

Je tiefer das Array ist, desto mehr Rechenressourcen werden für die Verarbeitung benötigt. Bitte beachten Sie, dass IE und Edge diese Funktion nicht unterstützen.

▍ Array.prototype.flatMap-Methode


Diese Methode verarbeitet zuerst die Elemente des Arrays mit der übergebenen Funktion und konvertiert dann das Array in eine flache Struktur.

 const arr = ["it's Sunny in", "", "California"]; arr.flatMap(x => x.split(" ")); // ["it's","Sunny","in", "", "California"] 

Der Unterschied zwischen flat und flatMap besteht darin, dass Sie Ihre eigene Funktion an die flatMap Methode übergeben können, mit der die Elemente des ursprünglichen Arrays konvertiert werden. Darüber hinaus „hebt“ flatMap im Gegensatz zu flat die Elemente von Arrays nur um eine Ebene an. Diese Methode gibt ein neues Array zurück. In solchen Fällen kann es hilfreich sein, wenn Sie die Elemente eines Arrays irgendwie verarbeiten müssen, bevor Sie es „flach“ machen.

Neue JS-Funktionen in Phase 3 der Genehmigung


In der dritten Phase der Koordinierung gibt es viele interessante neue Vorschläge zur Erweiterung und Verbesserung der Sprache. Betrachten wir einige davon.

▍ Zifferntrennzeichen


Es ist Ihnen passiert: Schreiben Sie eine lange Zahl in eine Variable und zweifeln Sie an der korrekten Schreibweise? Der betreffende Satz erlaubt es uns, die Bits von Zahlen durch Unterstriche zu trennen. Dies erleichtert das Arbeiten mit Zahlen.

 1_000_000_000      // ,   101_475_938.38     //     -     let fee = 123_00;    // $123 (, , 12300 ) let fee = 12_300;    // $12,300 (  !) let amount = 12345_00; // 12,345 (,  , 1234500 ) let amount = 123_45.00; // 12345 (, -  ) let amount = 1_234_500; // 1,234,500 let budget = 1_000_000_000_000; //   `budget`?  - 1 ! // // : console.log(budget === 10 ** 12); // true 

Nachdem jeder Entwickler diese Funktion akzeptiert hat, entscheidet er selbst, ob Entladungsabscheider verwendet werden sollen oder nicht. Eines ist jedoch sicher: Diese Funktion kann die mit der Berechnung der Ziffern großer Zahlen verbundenen Unannehmlichkeiten verringern.

▍Verwenden Sie, um auf der obersten Codeebene zu warten


Durch die Verwendung des Schlüsselworts await auf der obersten Codeebene können Module als große asynchrone Funktionen fungieren. Aufgrund dieser Funktion können ECMAScript-Module das Erscheinen einiger Ressourcen erwarten. Dies führt dazu, dass andere Module, die sie importieren, warten, bis der Hauptteil der importierten Module betriebsbereit ist.

Der Grund für diese Funktion ist, dass beim Importieren eines Moduls, für das eine Funktion mit dem async , die Ausgabe dieser Funktion undefined .

Das folgende Beispiel zeigt zwei Dateien. Es kann undefined output wenn die Funktion aufgerufen wird, bevor die durch die Versprechungen dargestellten Aufgaben abgeschlossen sind.

 // awaiting.mjs import { process } from "./some-module.mjs"; const dynamic = import(computedModuleSpecifier); const data = fetch(url); export const output = process((await dynamic).default, await data); // usage.mjs import { output } from "./awaiting.mjs"; export function outputPlusValue(value) { return output + value } console.log(outputPlusValue(100)); setTimeout(() => console.log(outputPlusValue(100), 1000); 

Alles wird in der awaiting.js bis die awaiting.js in awaiting.js aufgelöst sind.

▍Betreiber ?? und Überprüfung der Werte nur auf Null und undefiniert


Vielleicht ist dies unter allen Stage 3-Angeboten das nützlichste. Wir müssen oft so etwas schreiben:

 const obj = {  name: 'James' }; const name = obj.name || 'Jane'; // James 

Wenn obj.name durch einen falschen Wert dargestellt wird, erhält die Zeichenfolge Jane name . Infolgedessen ist der name nicht wie undefined . Das Problem ist jedoch, dass eine leere Zeichenfolge in diesem Fall als falscher Wert wahrgenommen wird. Wenn dies berücksichtigt wird, sollte dieser Code wie folgt umgeschrieben werden:

 const name = (obj.name && obj.name !== '') || 'Jane'; 

Es ist unpraktisch, die ganze Zeit so zu schreiben. Betreiber ?? (zwei Fragezeichen) erlaubt nur das Überprüfen von null und undefined Werten:

 const response = {  settings: {    nullValue: null,    height: 400,    animationDuration: 0,    headerText: '',    showSplashScreen: false  } }; const undefinedValue = response.settings.undefinedValue ?? 'some other default'; // : 'some other default' const nullValue = response.settings.nullValue ?? 'some other default'; // : 'some other default' const headerText = response.settings.headerText ?? 'Hello, world!'; // : '' const animationDuration = response.settings.animationDuration ?? 300; // : 0 const showSplashScreen = response.settings.showSplashScreen ?? true; // : false 

▍Bediener ?. und optionale Ketten


Dieser Vorschlag ähnelt dem gerade überprüften und kombiniert null und undefined Prüfungen. Es ist bekannt, dass Benutzer von TypeScript an dieser Funktion interessiert sind .
Betrachten Sie ein Beispiel:

 const city = country && country.city; // undefined  city   

Um zum Stadteigentum eines Landobjekts zu gelangen, müssen Sie das Vorhandensein des Landobjekts und das Vorhandensein des Stadteigentums darin überprüfen.

Mit dem Operator ?. (Fragezeichen und Punkt) Dieser Code kann folgendermaßen konvertiert werden:

 const city = country?.city; // undefined  city   

Diese Funktion scheint in folgenden Situationen nützlich zu sein:

 import { fetch } from '../yourFetch.js'; (async () => {  const res = await fetch();  // res && res.data && res.data.cities || undefined  const cities = res?.data?.cities; })(); 

▍ Methode Promise.any


Die Promise.any Methode akzeptiert ein Promise.any Objekt, das Versprechungsobjekte enthält, und gibt eine Versprechung zurück, die erfolgreich aufgelöst wurde, wenn mindestens eines der an sie übergebenen Versprechungsobjekte erfolgreich aufgelöst wurde. Wenn alle Versprechen-Objekte abgelehnt werden, wird ein Array mit Informationen zu den Gründen für ihre Ablehnung zurückgegeben.

So sieht die Verwendung von Promise.any mit dem async / await-Konstrukt aus:

 try {  const first = await Promise.any(promises);  //      . } catch (error) {  //    . } 

Hier ist das Gleiche mit Versprechen umgesetzt:

 Promise.any(promises).then(  (first) => {    //      .  },  (error) => {    //    .  } ); 

JavaScript verfügt bereits über Promise.all , .allSettled und .race , jedoch über eine ähnliche Methode. any war nicht. Infolgedessen haben wir eine neue Möglichkeit, die die bestehenden ergänzt und sich in bestimmten Situationen als nützlich erweisen kann. Obwohl sich dieser Vorschlag bereits in der dritten Genehmigungsphase befindet, wird er möglicherweise nicht in die nächste Ausgabe des ECMAScript-Standards aufgenommen, da zusätzliche Tests erforderlich sind.

Zusammenfassung


Es gibt viele interessante Vorschläge für die Entwicklung von JavaScript, die sich in der dritten Genehmigungsphase befinden. Es wird interessant sein, sie in den ES11- und ES12-Standards zu sehen. Natürlich ist es unwahrscheinlich, dass irgendjemand sie alle verwenden wird, aber einige von ihnen werden definitiv breite Anwendung finden und zur Steigerung der Qualität des JS-Codes beitragen.

Sehr geehrte Leser! Verwenden Sie bereits JavaScript-Funktionen, die fast für die nächste Version des Standards bereit sind?


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


All Articles