ECMAScript 2018 freigegeben
Die neunte Ausgabe des JavaScript Sprachstandards ECMAScript 2018 wurde vom Technical Committee 39 (TC39) nun offiziell freigegeben. Die folgenden neuen Features schafften es in den Standard:
Object Rest/Spread Properties
ECMAScript wird erweitert um Rest Properties für das Object Destructuring Assignment
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; // x ⇒ 1 // y ⇒ 2 // z ⇒ { a: 3, b: 4 }
und Spread Properties für Object Literale.
let n = { x, y, ...z }; // n ⇒ { x: 1, y: 2, a: 3, b: 4 }
Asynchrone Iteration
Asynchrone Iteratoren erweitern das bekannte Iterator-Interface, welches bereits in ECMAScript 2015 eingeführt wurde. Im Gegensatz zur bisherigen synchronen Variante liefert der Aufruf von next()
hier ein Promise-Objekt zurück. Zur Iteration steht ein neues for-wait-of
Statement zur Verfügung:
for await (const line of readLines(filePath)) { console.log(line); }
Promise.prototype.finally
Die Implementierung von Promise wird mit finally
abgeschlossen. Hiermit wird z. B. ermöglicht, Ressourcen aufzuräumen, wenn eine Promise erledigt ist. Beispiel:
fetch(myRequest) .then(result => { // ... }) .catch(error => { // ... }) .finally(() => { // Cleanup });
RegExp
Erweiterungen
Vier Erweiterungen für reguläre Ausdrucke schafften es in den Standard.
s
-Flag (dotAll/singleline)
Das aus anderen Sprachen bereits bekannte Singleline-Flag steht nun zur Verfügung:
/foo.bar/s.test('foo\nbar'); // ⇒ true
Named Capture Groups
Benannte Gruppen erhöhen die Lesbarkeit:
let re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>d{2})/u; let result = re.exec('2015-01-02'); // result.groups.year ⇒ '2015'; // result.groups.month ⇒ '01'; // result.groups.day ⇒ '02';
Lookbehind Assertions
Lookbehind Assertions stehen nun auch zur Verfügung.
Unicode Property Escapes
Unicode Zeichenklassen werden jetzt auch unterstützt:
const regexGreekSymbol = /\p{Script=Greek}/u; regexGreekSymbol.test('π'); // ⇒ true
Template Literals Revision
Tagged Template Literals wurden überarbeitet, hauptsächlich um mehr syntaktische Freiheiten zu haben.