{"id":5784,"date":"2024-03-20T14:24:42","date_gmt":"2024-03-20T13:24:42","guid":{"rendered":"https:\/\/www.clickstorm.de\/blog\/?p=5784"},"modified":"2024-04-02T09:15:29","modified_gmt":"2024-04-02T07:15:29","slug":"ecmascript-2023-24","status":"publish","type":"post","link":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/","title":{"rendered":"ECMAScript 2023\/24 &#8211; Welche \u00c4nderungen sind geplant?"},"content":{"rendered":"<p>Willkommen in der Zukunft von JavaScript: Im Juli letzten Jahres haben wir einige fantastische Neuerungen bekommen, die die JavaScript-Landschaft bereichern. Wir m\u00f6chten dir heute einen lockeren und verst\u00e4ndlichen Einblick in die aktuellen Funktionen sowie in die spannenden Features geben, die gerade die finale Phase des <a href=\"https:\/\/ecma-international.org\/technical-committees\/tc39\/\">TC39-Komitees<\/a> durchlaufen. Lass uns zudem gemeinsam einen Blick auf das werfen, was uns noch im Laufe des Jahres im <a href=\"https:\/\/tc39.es\/ecma262\/\">ECMAScript 2024<\/a> erwartet. F\u00fcr alle JavaScript-Fans gibt es jede Menge Spannendes zu entdecken!<\/p>\n<h2>Neue Funktionen und Verbesserungen<\/h2>\n<h3>Symbole als WeakMap-Schl\u00fcssel<\/h3>\n<p>&#8222;Klein, aber n\u00fctzlich&#8220; \u2013 so k\u00f6nnte man die neueste Erg\u00e4nzung in JavaScript zusammenfassen. Seit der Einf\u00fchrung in ECMAScript 2015 erm\u00f6glichen WeakMaps das Erweitern von Objekten mit zus\u00e4tzlichen Eigenschaften \u2013 beispielsweise zur Nachverfolgung der Nutzungsh\u00e4ufigkeit eines Objekts \u2013 ohne das Risiko eines Speicherlecks, da die Schl\u00fcssel-Wert-Paare in einer WeakMap vom Garbage Collector \u201crecycled\u201d werden k\u00f6nnen.<br \/>\nUrspr\u00fcnglich konnten in WeakMaps nur Objekte als Schl\u00fcssel verwendet werden, aber man m\u00f6chte, dass die Schl\u00fcssel einzigartig sind. <em>&#8222;Symbole wurden als eine neue unver\u00e4nderliche Methode definiert, die nicht neu erstellt werden kann. Daher macht es viel mehr Sinn, diese als einzigartigen Schl\u00fcssel in der WeakMap zu haben&#8220;<\/em>, sagte <a href=\"https:\/\/github.com\/codepo8\">Chris Heilmann<\/a>, Entwicklungsadvokat und Browser-Ingenieur.<\/p>\n<p><strong>Code Beispiel:<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">const weakMap = new WeakMap();\r\nconst key = Symbol(\"key1\");\r\nweakMap.set(key, \"Welcome Symbols to WeakMap !\");\r\nconsole.log(weakMap.get(key)); \/\/ Welcome Symbols to WeakMap !<\/pre>\n<h3>Verbesserungen bei Arrays<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5797 size-full\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/call-by-reference.gif\" alt=\"Beispiel: Call by Value und Call by Reference\" width=\"500\" height=\"270\" \/><\/p>\n<p>Auch bei Arrays wurden einige Neuerungen hinzugef\u00fcgt. In ES2023 wurden <strong>.findLast( )<\/strong> und <strong>.findLastIndex( )<\/strong> eingef\u00fchrt, um die Effizienz beim Suchen in Arrays zu steigern, insbesondere wenn das gesuchte Element am Ende des Arrays vermutet wird. Zudem erm\u00f6glichen neue Methoden wie <strong>.toReversed( )<\/strong>, <strong>.toSorted( )<\/strong>, <strong>.toSpliced( )<\/strong> und <strong>.with( )<\/strong> die Manipulation von Arrays, ohne das Original zu ver\u00e4ndern (siehe <a href=\"https:\/\/www.clickstorm.de\/blog\/call-by-reference-value-javascript\/\">Call-by-Reference vs. Call-by-Value<\/a>).<\/p>\n<h3>Change Array by Copy<\/h3>\n<h4>Reverse Sequence<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">const sequence = [1, 2, 3, 4];\r\nconst reversed = sequence.toReversed();\r\nconsole.log(reversed); \/\/ [4, 3, 2, 1]\r\nconsole.log(sequence); \/\/ [1, 2, 3, 4]<\/pre>\n<h4>Sort Array<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">const unsorted = [1, 3, 4, 2];\r\nconst sorted = unsorted.toSorted();\r\nconsole.log(sorted); \/\/ [1, 2, 3, 4]\r\nconsole.log(unsorted); \/\/ [1, 3, 4, 2]<\/pre>\n<h4>Verwendung von .findLast() und .findLastIndex()<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\/* Beispiel vor ES2023 *\/\r\n\r\nconst numbers = [42, 13, 7, 21, 82, 100];\r\n[...numbers].reverse().find(n =&gt; n === 82); \/\/ 82, iteriert von links nach rechts\r\nnumbers.length - 1 - [...numbers].reverse().findIndex(n =&gt; n === 82); \/\/ 4\r\n\r\n\/* Beispiel nach ES2023 *\/\r\n\r\nnumbers.findLast(n =&gt; n === 82); \/\/ 82, iteriert von rechts nach links\r\nnumbers.findLastIndex(n =&gt; n === 82); \/\/ 4<\/pre>\n<h3>Hashbang-Kommentare<\/h3>\n<p>Die bereits von SEO bekannten <strong>Hashbangs (#!)<\/strong>, welche zur Indexierung f\u00fcr Crawlern verwendet werden, bestimmen nun standardisiert den Interpreter f\u00fcr JavaScript-Skripte. Dies erleichtert die Ausf\u00fchrung von JS-Skripten als eigenst\u00e4ndige ausf\u00fchrbare Dateien.<\/p>\n<p>Beispiel:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">#!\/usr\/bin\/env node\r\nconsole.log('Hello, World!');<\/pre>\n<h2>Ausblick auf ES2024<\/h2>\n<ul>\n<li>Well-Formed Unicode Strings<\/li>\n<li>Regular Expression v-Flag: Erweiterte M\u00f6glichkeiten f\u00fcr regul\u00e4re Ausdr\u00fccke.<\/li>\n<li>Atomics.waitAsync: Asynchrones Warten auf Speicherorte im Shared Memory.<\/li>\n<li>Promise.withResolvers<\/li>\n<li>Array Grouping<\/li>\n<li>Temporal: Moderne API f\u00fcr Datum und Zeit<\/li>\n<\/ul>\n<h3>Well-Formed Unicode Strings<\/h3>\n<p>In der Welt von JavaScript sind Strings nach dem <strong>UTF-16<\/strong>-Standard mit Surrogate-Paaren kodiert. Hast du schon einmal von diesem Konzept? Falls nicht hier eine kurze Erkl\u00e4rung:<\/p>\n<ul>\n<li><strong>Surrogat-Paare<\/strong>: Da manche Unicode-Zeichen nicht in 16 Bit passen, verwendet UTF-16 f\u00fcr diese Zeichen zwei 16-Bit-Codes, bekannt als <em>Surrogat-Paare<\/em>. Ein <em>Surrogat-Paar<\/em> besteht aus einem <strong>&#8222;High-Surrogate&#8220;<\/strong> und einem <strong>&#8222;Low-Surrogate&#8220;<\/strong>. Zusammen repr\u00e4sentieren diese beiden Surrogat-Codes ein einzelnes Unicode-Zeichen, das au\u00dferhalb des Bereichs der sogenannten &#8222;Basic Multilingual Plane&#8220; liegt, also ein Zeichen, das mehr als 16 Bit zur Darstellung ben\u00f6tigt.<\/li>\n<\/ul>\n<p>Schauen wir uns nun die neue Funktion <strong>isWellFormed( )<\/strong>\u00a0an. Diese bietet eine praktische M\u00f6glichkeit, die <em>Wohlgeformtheit<\/em> eines Strings zu \u00fcberpr\u00fcfen, indem sie sicherstellt, dass keine isolierten Surrogate vorhanden sind. Sie zeichnet sich durch ihre Effizienz aus, da sie es erm\u00f6glicht, direkt auf die interne String-Darstellung zuzugreifen, was gegen\u00fcber eigenen Implementierungen ein deutlicher Vorteil ist. F\u00fcr die Umwandlung eines Strings in einen wohlgeformten String steht die Methode <strong>.toWellFormed()<\/strong> zur Verf\u00fcgung. Zudem bietet <strong>.isWellFormed()<\/strong> die Flexibilit\u00e4t, fehlerhafte Strings \u2013 also solche, die nicht den Kriterien entsprechen \u2013 auf andere Weise zu behandeln. Dies ist besonders bei der <strong>encodeURI()<\/strong> Funktion n\u00fctzlich, da diese nur wohlgeformte Strings akzeptiert.<\/p>\n<p>Eine m\u00f6gliche Implementierung k\u00f6nnte so aussehen:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">const str1 = \"ab\\uD800\";\r\nconst str2 = \"abc\";\r\nconsole.log(str1.isWellFormed()); \/\/ false\r\nconsole.log(str2.isWellFormed()); \/\/ true\r\nconsole.log(str1.toWellFormed()); \/\/ \"ab\ufffd\"\r\nconsole.log(str2.toWellFormed()); \/\/ \"abc\"<\/pre>\n<p>Beispiel mit encodeURI()<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">const problematicURL = \"https:\/\/clickstorm.de\/query=\\uDC00data\";\r\ntry {\r\n  encodeURI(problematicURL);\r\n} catch (e) {\r\n  console.log('Error:', e.message); \/\/ Erwarted: URIError: URI malformed\r\n}\r\n\/\/ Verwendung von toWellFormed()\r\nconsole.log('Well Formed URI:', encodeURI(problematicURL.toWellFormed()));\r\n\/\/ Erwartete Ausgabe: \"https:\/\/clickstorm.de\/query=%EF%BF%BDdata\"<\/pre>\n<h3>Atomics.waitAsync<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5829\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/async_programming_java.webp\" alt=\"Async Programming JavaScript - Meme\" width=\"400\" height=\"552\" srcset=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/async_programming_java.webp 500w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/async_programming_java-217x300.webp 217w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/p>\n<p>Es gibt auch eine Erneuerung bei der asynchronen Programmierung. Die statische Methode <strong>Atomics.waitAsync( )<\/strong> wartet asynchron auf einen gemeinsamen Speicherort und gibt ein Promise zur\u00fcck. Im Gegensatz zu <strong>Atomics.wait( )<\/strong> ist waitAsync nicht-blockierend und kann im Haupt-Thread verwendet werden. Stell dir vor, du arbeitest an einer Webanwendung, die gleichzeitig viele Daten verarbeiten muss. Mit waitAsync kannst du effizient auf bestimmte Ereignisse in gemeinsamen Speicherbereichen warten, ohne dass der Nutzerfluss deiner Anwendung unterbrochen wird. Es ist wie ein zuverl\u00e4ssiger Assistent, der im Hintergrund arbeitet, w\u00e4hrend du dich auf andere wichtige Aufgaben konzentrierst. Sehen wir uns nun die Verwendung von <strong>waitAsync( )<\/strong> an:<\/p>\n<p>Stell dir vor, wir haben eine Art digitales Schachbrett, das <strong>SharedArrayBuffer<\/strong> genannt wird. Auf diesem Schachbrett gibt es eine Reihe von Feldern, die durch <strong>Int32Array<\/strong> repr\u00e4sentiert werden. Jedes Feld kann eine Zahl enthalten. In unserem Beispiel haben wir dieses Schachbrett mit 1024 Feldern erstellt, aber wir konzentrieren uns nur auf das erste Feld (Position 0). Zun\u00e4chst setzen wir den Wert dieses Feldes auf 0.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">const sab = new SharedArrayBuffer(1024);\r\nconst int32 = new Int32Array(sab);<\/pre>\n<p>Jetzt kommt der spannende Teil: Wir haben einen Beobachter, den &#8222;lesenden Thread&#8220;. Dieser Beobachter ist besonders interessiert am ersten Feld. Er m\u00f6chte wissen, ob und wann sich der Wert dieses Feldes \u00e4ndert. Also setzt er sich daneben und beginnt zu warten. Aber statt die ganze Zeit wach zu bleiben, nutzt er <strong>Atomics.waitAsync()<\/strong> und sagt im \u00fcbertragenen Sinne: &#8222;<em>Ich warte bis zu 1000 Millisekunden (1 Sekunde), um zu sehen, ob der Wert von 0 auf etwas anderes wechselt.<\/em>&#8220;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">const result = Atomics.waitAsync(int32, 0, 0, 1000);\r\n\/\/ { async: true, value: Promise {&lt;pending&gt;} }<\/pre>\n<p><strong>Atomics.waitAsync()<\/strong> ist clever. Es h\u00e4lt den Beobachter nicht davon ab, andere Dinge zu tun, w\u00e4hrend er wartet. Es gibt ihm ein Promise zur\u00fcck und benachrichtigt diesen, sobald sich etwas \u00e4ndert, oder die Zeit abgelaufen ist.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">Atomics.notify(int32, 0);\r\n\/\/ { async: true, value: Promise {&lt;fulfilled&gt;: 'ok'} }<\/pre>\n<p>Fazit: Wenn das Promise nicht zu &#8222;ok&#8220; aufgel\u00f6st wird, war der Wert am gemeinsam genutzten Speicherort nicht wie erwartet (der Wert w\u00e4re &#8222;not-equal&#8220; anstelle eines Promises), oder das Zeitlimit wurde erreicht (das Promise wird mit &#8222;time-out&#8220; aufgel\u00f6st).<\/p>\n<h3>Array Gruppierungen<\/h3>\n<p>Das &#8222;Array Grouping&#8220;-Feature, zielt darauf ab, das Gruppieren von Elementen in Arrays (und iterierbaren Objekten) zu vereinfachen.<\/p>\n<p>Codebeispiele:<\/p>\n<h4>Object.groupBy<\/h4>\n<p>Zweck: Erm\u00f6glicht das Gruppieren von Elementen eines Arrays basierend auf einem beliebigen Schl\u00fcssel.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">const array = [1, 2, 3, 4, 5];\r\nconst grouped = Object.groupBy(array, (num) =&gt; {\r\n  return num % 2 === 0 ? 'even' : 'odd';\r\n});\r\n\/\/ Ergebnis: { odd: [1, 3, 5], even: [2, 4] }<\/pre>\n<h4>Map.groupBy<\/h4>\n<p>Zweck: \u00c4hnlich wie Object.groupBy, aber gibt die Ergebnisse in einer Map zur\u00fcck, was n\u00fctzlich ist, wenn die Schl\u00fcssel komplexe Objekttypen sind.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">const odd = { odd: true };\r\nconst even = { even: true };\r\nconst mapGrouped = Map.groupBy(array, (num) =&gt; {\r\n  return num % 2 === 0 ? even : odd;\r\n});\r\n\/\/ Ergebnis: Map { {odd: true}: [1, 3, 5], {even: true}: [2, 4]<\/pre>\n<h3>Temporal API<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5795 size-full\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-temporal-api.png\" alt=\"Temporal-API f\u00fcr ECMAScript 2024\" width=\"1170\" height=\"659\" srcset=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-temporal-api.png 1170w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-temporal-api-300x169.png 300w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-temporal-api-1024x577.png 1024w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-temporal-api-768x433.png 768w\" sizes=\"auto, (max-width: 1170px) 100vw, 1170px\" \/><\/p>\n<p>Schon seit langer Zeit hat die Verwendung des Date-Objekts in JS einige Schwierigkeiten. Um diese zu beheben wurde die Temporal-API als ein globales Objekt, das als Top-Level-Namespace (\u00e4hnlich wie Math) fungiert und eine moderne API f\u00fcr Datum und Zeit in die ECMAScript-Sprache bringt, hinzugef\u00fcgt. Dies adressiert die Probleme von Date, indem es:<\/p>\n<ul>\n<li>Benutzerfreundliche APIs f\u00fcr Datum- und Zeitberechnungen bereitstellt.<\/li>\n<li>Erstklassige Unterst\u00fctzung f\u00fcr alle Zeitzonen, einschlie\u00dflich DST-sicherer Arithmetik, bietet.<\/li>\n<li>Ausschlie\u00dflich mit Objekten arbeitet, die feste Daten und Zeiten repr\u00e4sentieren.<\/li>\n<li>Einen streng spezifizierten String-Format f\u00fcr das Parsen verwendet.<\/li>\n<li>Nicht-gregorianische Kalender unterst\u00fctzt.<\/li>\n<\/ul>\n<p>Des Weiteren stellt es separate ECMAScript-Klassen f\u00fcr reine Datum-, reine Zeit- und andere spezifische Anwendungsf\u00e4lle zur Verf\u00fcgung. Dies verbessert die Lesbarkeit des Codes und vermeidet Fehler, die durch falsche Annahmen \u00fcber 0, UTC oder die lokale Zeitzone bei tats\u00e4chlich unbekannten Werten entstehen.<\/p>\n<h3>Erweiterbarkeit von ArrayBuffer \/ SharedArrayBuffer<\/h3>\n<p>Es wird eine Funktion hinzugef\u00fcgt, um ArrayBuffer und SharedArrayBuffer erweiterbar zu machen, was eine effizientere Speicherverwaltung und bessere Synchronisation mit WebAssembly erm\u00f6glicht. Diese Buffer k\u00f6nnen bei der Erstellung eine maximale Gr\u00f6\u00dfe erhalten und dann dynamisch innerhalb dieser Grenzen vergr\u00f6\u00dfert oder verkleinert (ArrayBuffer) bzw. nur vergr\u00f6\u00dfert werden (SharedArrayBuffer). Dies verbessert die Leistung vor allem f\u00fcr Anwendungen wie WebGPU, die h\u00e4ufige \u00c4nderungen der Buffergr\u00f6\u00dfe erfordern.<\/p>\n<h4>Beispiel<\/h4>\n<p>Zuerst wird ein ArrayBuffer namens rab mit einer anf\u00e4nglichen Gr\u00f6\u00dfe von 1024 Bytes erstellt.<br \/>\nZus\u00e4tzlich wird eine maximale Gr\u00f6\u00dfe von 2048 Bytes festgelegt.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">let rab = new ArrayBuffer(1024, { maxByteLength: 2048 });<\/pre>\n<p>Ein Uint32Array namens uintArray wird erstellt, das rab als Basis verwendet.<br \/>\nDie L\u00e4nge von uintArray ist 256, da jeder Uint32 4 Bytes gro\u00df ist und rab anf\u00e4nglich 1024 Bytes hat.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">let uintArray = new Uint32Array(rab);\r\nconsole.log(uintArray.length); \/\/ 256 (1024 Bytes \/ 4 Bytes pro Uint32)<\/pre>\n<p>Der ArrayBuffer rab wird dann auf seine maximale Gr\u00f6\u00dfe von 2048 Bytes erweitert.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">rab.resize(2048);\r\nconsole.log(uintArray.length); \/\/ 512 (2048 Bytes \/ 4 Bytes pro Uint32)<\/pre>\n<p>Nach der Vergr\u00f6\u00dferung des ArrayBuffer rab passt sich die L\u00e4nge von uintArray entsprechend an.<br \/>\nSie verdoppelt sich auf 512, da nun mehr Speicherplatz f\u00fcr Uint32-Eintr\u00e4ge verf\u00fcgbar ist.<\/p>\n<h4>Vorteile der Speichererweiterbarkeit:<\/h4>\n<ul>\n<li><strong>Flexibilit\u00e4t:<\/strong> Die M\u00f6glichkeit, die Gr\u00f6\u00dfe eines ArrayBuffer dynamisch anzupassen, bietet Flexibilit\u00e4t bei der Speicherverwaltung.<\/li>\n<li><strong>Speichereffizienz:<\/strong> Vermeidet das Neuerstellen und Kopieren urspr\u00fcnglich gr\u00f6\u00dferer ArrayBuffer-Objekte, um Data Leaks zu reduzieren.<\/li>\n<li><strong>Performance:<\/strong> Durch das Umgehen von Neuzuweisungen und Kopiervorg\u00e4ngen verbessert sich die Performance, besonders in Anwendungen mit h\u00e4ufigen Speichergr\u00f6\u00dfen\u00e4nderungen, indem Neuzuweisungen und Kopiervorg\u00e4nge umgehen.<\/li>\n<li><strong>Pr\u00e4zisere Speicherverwaltung:<\/strong> Entwickler k\u00f6nnen den Speicher pr\u00e4ziser entsprechend den Anforderungen ihrer Anwendung verwalten, was besonders bei komplexen Datenstrukturen oder leistungsintensiven Anwendungen von Vorteil ist.<\/li>\n<\/ul>\n<h2>Fazit:<\/h2>\n<p>Wir haben gesehen, dass das ECMAScript-Update von 2023\/24 einige kleine, aber dennoch wirkungsvolle Erneuerungen mit sich bringt. Besonders freuen wir uns auf die neue Zeit und Datums API (Temporal), welche einige der Herausforderungen, die das bisherige Date-Objekt mit sich brachte, l\u00f6sen soll und das Arbeiten intuitiver gestaltet. Allgemein sind diese Updates ein gutes Zeichen f\u00fcr JavaScript, da die Sprache hierdurch best\u00e4ndig w\u00e4chst und sich weiterentwickelt. Sie passt sich den Bed\u00fcrfnissen moderner Web-Entwicklungen an und bleibt damit eine unverzichtbare Sprache in der Welt der Webentwicklung.<\/p>\n<p>Auf welche \u00c4nderung freust du dich am meisten? Lass es uns gerne in den Kommentaren wissen!<\/p>\n<p>&nbsp;<\/p>\n<p>Bilder: Canva, Medium.com, Chat-GPT \/ <a href=\"https:\/\/openai.com\/dall-e-3\">DALL\u00b7E 3<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Willkommen in der Zukunft von JavaScript: Im Juli letzten Jahres haben wir einige fantastische Neuerungen bekommen, die die JavaScript-Landschaft bereichern. Wir m\u00f6chten dir heute einen lockeren und verst\u00e4ndlichen Einblick in [&hellip;]<\/p>\n","protected":false},"author":17,"featured_media":5785,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[137],"tags":[45,224,22,86],"class_list":["post-5784","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend","tag-entwicklung","tag-javascript","tag-release","tag-update"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ECMAScript 2023\/24 - Welche \u00c4nderungen sind geplant? - clickstorm Blog<\/title>\n<meta name=\"description\" content=\"Schaue dir die neuesten ECMAScript 2023\/24 Updates f\u00fcr JavaScript an! Unser kompakter \u00dcberblick f\u00fchrt dich durch die wichtigsten Neuerungen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ECMAScript 2023\/24 - Welche \u00c4nderungen sind geplant? - clickstorm Blog\" \/>\n<meta property=\"og:description\" content=\"Schaue dir die neuesten ECMAScript 2023\/24 Updates f\u00fcr JavaScript an! Unser kompakter \u00dcberblick f\u00fchrt dich durch die wichtigsten Neuerungen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/\" \/>\n<meta property=\"og:site_name\" content=\"clickstorm Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/de-de.facebook.com\/clickstorm\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-20T13:24:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-02T07:15:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-2023-24.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1240\" \/>\n\t<meta property=\"og:image:height\" content=\"698\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Heiko\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@clickstorm_gmbh\" \/>\n<meta name=\"twitter:site\" content=\"@clickstorm_gmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Heiko\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"9\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/\"},\"author\":{\"name\":\"Heiko\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/person\\\/fc26e6738ef98bed66e619380990701b\"},\"headline\":\"ECMAScript 2023\\\/24 &#8211; Welche \u00c4nderungen sind geplant?\",\"datePublished\":\"2024-03-20T13:24:42+00:00\",\"dateModified\":\"2024-04-02T07:15:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/\"},\"wordCount\":1495,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/ecmascript-2023-24.png\",\"keywords\":[\"Entwicklung\",\"JavaScript\",\"Release\",\"Update\"],\"articleSection\":[\"Frontend\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/\",\"name\":\"ECMAScript 2023\\\/24 - Welche \u00c4nderungen sind geplant? - clickstorm Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/ecmascript-2023-24.png\",\"datePublished\":\"2024-03-20T13:24:42+00:00\",\"dateModified\":\"2024-04-02T07:15:29+00:00\",\"description\":\"Schaue dir die neuesten ECMAScript 2023\\\/24 Updates f\u00fcr JavaScript an! Unser kompakter \u00dcberblick f\u00fchrt dich durch die wichtigsten Neuerungen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/ecmascript-2023-24.png\",\"contentUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/ecmascript-2023-24.png\",\"width\":1240,\"height\":698,\"caption\":\"ECMAScript 2023\\\/24 - Erneuerungen\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/ecmascript-2023-24\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ECMAScript 2023\\\/24 &#8211; Welche \u00c4nderungen sind geplant?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\",\"name\":\"clickstorm Blog\",\"description\":\"Neuigkeiten rund um Webentwicklung\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\",\"name\":\"clickstorm GmbH\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/logo.svg\",\"caption\":\"clickstorm GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/de-de.facebook.com\\\/clickstorm\\\/\",\"https:\\\/\\\/x.com\\\/clickstorm_gmbh\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCEaU1eUbug6OiI4uU6vA-cA\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/person\\\/fc26e6738ef98bed66e619380990701b\",\"name\":\"Heiko\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8722df6500534a4b1a32e135440c947ac0cb7ef15681b518b1a765a47c610629?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8722df6500534a4b1a32e135440c947ac0cb7ef15681b518b1a765a47c610629?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8722df6500534a4b1a32e135440c947ac0cb7ef15681b518b1a765a47c610629?s=96&d=mm&r=g\",\"caption\":\"Heiko\"},\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/author\\\/heiko\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ECMAScript 2023\/24 - Welche \u00c4nderungen sind geplant? - clickstorm Blog","description":"Schaue dir die neuesten ECMAScript 2023\/24 Updates f\u00fcr JavaScript an! Unser kompakter \u00dcberblick f\u00fchrt dich durch die wichtigsten Neuerungen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/","og_locale":"de_DE","og_type":"article","og_title":"ECMAScript 2023\/24 - Welche \u00c4nderungen sind geplant? - clickstorm Blog","og_description":"Schaue dir die neuesten ECMAScript 2023\/24 Updates f\u00fcr JavaScript an! Unser kompakter \u00dcberblick f\u00fchrt dich durch die wichtigsten Neuerungen.","og_url":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/","og_site_name":"clickstorm Blog","article_publisher":"https:\/\/de-de.facebook.com\/clickstorm\/","article_published_time":"2024-03-20T13:24:42+00:00","article_modified_time":"2024-04-02T07:15:29+00:00","og_image":[{"width":1240,"height":698,"url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-2023-24.png","type":"image\/png"}],"author":"Heiko","twitter_card":"summary_large_image","twitter_creator":"@clickstorm_gmbh","twitter_site":"@clickstorm_gmbh","twitter_misc":{"Verfasst von":"Heiko","Gesch\u00e4tzte Lesezeit":"9\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/#article","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/"},"author":{"name":"Heiko","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/person\/fc26e6738ef98bed66e619380990701b"},"headline":"ECMAScript 2023\/24 &#8211; Welche \u00c4nderungen sind geplant?","datePublished":"2024-03-20T13:24:42+00:00","dateModified":"2024-04-02T07:15:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/"},"wordCount":1495,"commentCount":0,"publisher":{"@id":"https:\/\/www.clickstorm.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-2023-24.png","keywords":["Entwicklung","JavaScript","Release","Update"],"articleSection":["Frontend"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/","url":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/","name":"ECMAScript 2023\/24 - Welche \u00c4nderungen sind geplant? - clickstorm Blog","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/#primaryimage"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-2023-24.png","datePublished":"2024-03-20T13:24:42+00:00","dateModified":"2024-04-02T07:15:29+00:00","description":"Schaue dir die neuesten ECMAScript 2023\/24 Updates f\u00fcr JavaScript an! Unser kompakter \u00dcberblick f\u00fchrt dich durch die wichtigsten Neuerungen.","breadcrumb":{"@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/#primaryimage","url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-2023-24.png","contentUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2024\/01\/ecmascript-2023-24.png","width":1240,"height":698,"caption":"ECMAScript 2023\/24 - Erneuerungen"},{"@type":"BreadcrumbList","@id":"https:\/\/www.clickstorm.de\/blog\/ecmascript-2023-24\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.clickstorm.de\/blog\/"},{"@type":"ListItem","position":2,"name":"ECMAScript 2023\/24 &#8211; Welche \u00c4nderungen sind geplant?"}]},{"@type":"WebSite","@id":"https:\/\/www.clickstorm.de\/blog\/#website","url":"https:\/\/www.clickstorm.de\/blog\/","name":"clickstorm Blog","description":"Neuigkeiten rund um Webentwicklung","publisher":{"@id":"https:\/\/www.clickstorm.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.clickstorm.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.clickstorm.de\/blog\/#organization","name":"clickstorm GmbH","url":"https:\/\/www.clickstorm.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2017\/11\/logo.svg","contentUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2017\/11\/logo.svg","caption":"clickstorm GmbH"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/de-de.facebook.com\/clickstorm\/","https:\/\/x.com\/clickstorm_gmbh","https:\/\/www.youtube.com\/channel\/UCEaU1eUbug6OiI4uU6vA-cA"]},{"@type":"Person","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/person\/fc26e6738ef98bed66e619380990701b","name":"Heiko","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/8722df6500534a4b1a32e135440c947ac0cb7ef15681b518b1a765a47c610629?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8722df6500534a4b1a32e135440c947ac0cb7ef15681b518b1a765a47c610629?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8722df6500534a4b1a32e135440c947ac0cb7ef15681b518b1a765a47c610629?s=96&d=mm&r=g","caption":"Heiko"},"url":"https:\/\/www.clickstorm.de\/blog\/author\/heiko\/"}]}},"_links":{"self":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/5784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/comments?post=5784"}],"version-history":[{"count":19,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/5784\/revisions"}],"predecessor-version":[{"id":5885,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/5784\/revisions\/5885"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media\/5785"}],"wp:attachment":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media?parent=5784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/categories?post=5784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/tags?post=5784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}