{"id":23840,"date":"2023-10-13T09:00:00","date_gmt":"2023-10-13T07:00:00","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=23840"},"modified":"2023-11-10T13:02:37","modified_gmt":"2023-11-10T12:02:37","slug":"ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/","title":{"rendered":"ECMAScript 2023 (ES14): un&#8217;analisi approfondita delle novit\u00e0 e degli aggiornamenti"},"content":{"rendered":"\n<p>Il mondo del web e dello sviluppo software ha visto la crescita esponenziale e la maturazione di JavaScript come uno dei linguaggi di programmazione pi\u00f9 influenti e onnipresenti. Fin dai suoi umili inizi nei primi giorni del web, quando era usato principalmente per aggiungere interattivit\u00e0 di base alle pagine web, JavaScript ha percorso una strada lunga e tortuosa. Ora, \u00e8 al centro delle applicazioni web moderne, delle tecnologie di sviluppo Front-End e perfino degli ambienti di Back-End con piattaforme come Node.js. <\/p>\n\n\n\n<p>L&#8217;emergere di ogni nuova versione di ECMAScript, la specifica ufficiale dietro JavaScript, segna un ulteriore passo nella sua evoluzione. Con l&#8217;arrivo di ECMAScript 2023 (ES14), il linguaggio introduce nuovi strumenti e funzionalit\u00e0, consolidando ulteriormente la sua posizione come colonna portante della tecnologia web moderna. Anche se ES14 non ha portato una rivoluzione completa, i suoi aggiornamenti e perfezionamenti offrono nuove opportunit\u00e0 e soluzioni per gli sviluppatori di tutto il mondo.<\/p>\n\n\n\n<p>Proseguiamo ora con una panoramica pi\u00f9 dettagliata di ci\u00f2 che ES14 ha da offrire e di come queste novit\u00e0 influenzeranno il panorama dello sviluppo in JavaScript.<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-c95d7b0b gb-headline-text\"><strong>Introduzione alle Specifiche ECMAScript<\/strong><\/h2>\n\n\n\n<p>Le specifiche ECMAScript fungono da bibbia per JavaScript. Forniscono una documentazione dettagliata delle funzionalit\u00e0 del linguaggio, servendo sia come riferimento educativo per gli sviluppatori sia come guida per gli implementatori di motori JavaScript.<\/p>\n\n\n\n<p>Per chi \u00e8 nuovo a queste specifiche, \u00e8 possibile esplorarle sul sito ufficiale <a href=\"https:\/\/tc39.es\/ecma262\/\">tc39.es\/ecma262\/<\/a>. Le specifiche per il 2023 sono disponibili su <a href=\"https:\/\/tc39.es\/ecma262\/2023\/\">tc39.es\/ecma262\/2023\/<\/a>. Questo documento, oltre ad essere una miniera d&#8217;oro di informazioni, riflette l&#8217;adattabilit\u00e0 e la resilienza di JavaScript come linguaggio, crescendo e evolvendosi in risposta alle esigenze reali degli sviluppatori.<\/p>\n\n\n\n<p>Uno degli aspetti interessanti delle specifiche ECMAScript \u00e8 la loro natura evolutiva. Non sono statiche. Cambiano, si adattano e crescono in risposta alle esigenze degli sviluppatori e ai progressi tecnologici nel campo del web e dello sviluppo software. Spesso, vediamo che una nuova funzionalit\u00e0 diventa parte delle specifiche ufficiali solo dopo essere stata accettata e adottata dalla comunit\u00e0 degli sviluppatori. Questo dimostra la natura dinamica e reattiva del processo di sviluppo delle specifiche.<\/p>\n\n\n\n<p>Prendiamo ad esempio la sintassi Shebang introdotta in ES14. Questa non \u00e8 una funzionalit\u00e0 completamente nuova per la comunit\u00e0 degli sviluppatori. Era gi\u00e0 utilizzata in alcuni contesti, ma ora, con la sua inclusione nelle specifiche, diventa una parte standardizzata del linguaggio. Una volta che una funzionalit\u00e0 \u00e8 stata codificata nelle specifiche, funge da base stabile per ulteriori innovazioni e adattamenti.<\/p>\n\n\n\n<p>Alcune delle funzionalit\u00e0 introdotte nelle specifiche ECMAScript nel corso degli anni sono state influenzate da altri linguaggi di programmazione. Ad esempio, l&#8217;introduzione della sintassi async\/await \u00e8 stata influenzata dal linguaggio C#. Questo dimostra che le specifiche ECMAScript non sono solo un set insulare di regole, ma piuttosto un documento vivo che impara e si adatta prendendo ispirazione da varie fonti.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Lettura consigliata:<a href=\"https:\/\/www.codemotion.com\/magazine\/it\/frontend-it\/la-dev-mode-di-figma-cose-e-come-funziona\/\" class=\"ek-link\"> La Dev Mode di Figma: cos\u2019\u00e8 e come funziona<\/a><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"gb-headline gb-headline-dcdb5cdc gb-headline-text\"><strong>Il ruolo delle specifiche nella crescita di JavaScript<\/strong><\/h2>\n\n\n\n<p>Una parte cruciale dello sviluppo di JavaScript \u00e8 il modo in cui le specifiche ECMAScript hanno accompagnato e guidato la sua evoluzione. Da semplici script per creare effetti hover su immagini a potenti applicazioni web a singola pagina (SPA), <a href=\"https:\/\/www.codemotion.com\/magazine\/it\/frontend-it\/javascript-it\/come-programmare-con-javascript-tutto-sul-linguaggio-per-il-web\/\" class=\"ek-link\">JavaScript<\/a> si \u00e8 evoluto a passi da gigante. E le specifiche ECMAScript hanno avuto un ruolo fondamentale in questa trasformazione.<\/p>\n\n\n\n<p>Uno dei principi cardine delle specifiche ECMAScript \u00e8 la loro capacit\u00e0 di riflettere la realt\u00e0 pratica. Molte volte, una funzionalit\u00e0 viene integrata nelle specifiche ufficiali solo dopo essere stata ampiamente adottata e accettata dalla comunit\u00e0. Questo approccio bottom-up garantisce che le nuove aggiunte siano realmente utili e rispondano alle esigenze attuali.<\/p>\n\n\n\n<p>Ora diamo un&#8217;occhiata alle nuove funzionalit\u00e0 introdotte in JavaScript nel 2023.<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-82021776 gb-headline-text\"><strong>Cambiare gli array &#8220;per copia&#8221;: immutabilit\u00e0, funzioni pure ed effetti collaterali<\/strong><\/h2>\n\n\n\n<p>La manipolazione degli array \u00e8 un aspetto fondamentale della programmazione JavaScript. ECMAScript 2023 introduce metodi di array avanzati che ci consentono di apportare modifiche a un array mantenendo invariato l&#8217;array originale. Invece di modificare direttamente l&#8217;array (tramite le cosiddette funzioni &#8220;in-place&#8221; o &#8220;in loco&#8221;), questi metodi creano una nuova copia dell&#8217;array con le modifiche desiderate. Queste funzioni vengono chiamate &#8220;pure&#8221;, dato che non modificano lo stato dei loro parametri, ma restituiscono un nuovo oggetto che rappresenta il risultato della chiamata alla funzione. Nelle funzioni pure possiamo manipolare con sicurezza i valori dell&#8217;array senza preoccuparci degli &#8220;effetti collaterali&#8221; indesiderati sull&#8217;array originale, che mantiene la sua immutabilit\u00e0.<\/p>\n\n\n\n<p>Questa strategia \u00e8 molto utile nelle applicazioni moderne basate sulla programmazione funzionale e dichiarativa.<\/p>\n\n\n\n<p>Questa caratteristica \u00e8 molto importante, perch\u00e9 aiuta a mantenere l&#8217;integrit\u00e0 dell&#8217;array originale consentendoci comunque di lavorare con versioni modificate quando necessario.<\/p>\n\n\n\n<p>Andiamo ad analizzare questi nuovi metodi che vengono aggiunti a Array.prototype e TypedArray.prototype.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Lettura consigliata:<a href=\"https:\/\/www.codemotion.com\/magazine\/it\/linguaggi-programmazione\/react-tutto-sulla-library-javascript\/\" class=\"ek-link\"> React, tutto sulla libreria Javascript<\/a><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"gb-headline gb-headline-c4ad062d gb-headline-text\"><strong>toSorted()<\/strong><\/h2>\n\n\n\n<p>toSorted ha la stessa firma di Array.prototype.sort(), ma crea un nuovo array invece di operare sull&#8217;array stesso.&nbsp;<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">const<\/span> numbers = &#91;<span class=\"hljs-number\">5<\/span>,<span class=\"hljs-number\">4<\/span>,<span class=\"hljs-number\">2<\/span>,<span class=\"hljs-number\">3<\/span>,<span class=\"hljs-number\">1<\/span>]\n\nnumbers === numbers.sort()      <span class=\"hljs-comment\">\/\/ true - &#91;1, 2, 3, 4, 5]<\/span>\nnumbers === numbers.toSorted()  <span class=\"hljs-comment\">\/\/ false - &#91;1, 2, 3, 4, 5]<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>La prima chiamata a sort modifica l&#8217;array numbers.<\/p>\n\n\n\n<p>La seconda chiamata a toSorted genera un nuovo array e lo restituisce.<\/p>\n\n\n\n<p>toSorted(), come sort(), accetta anche un singolo argomento opzionale, una funzione comparatrice. Ad esempio, potremmo utilizzare toSorted() per creare un nuovo array in ordine decrescente:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">const<\/span> numbers = &#91;<span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">7<\/span>, <span class=\"hljs-number\">3<\/span>, <span class=\"hljs-number\">9<\/span>, <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">6<\/span>, <span class=\"hljs-number\">4<\/span>]\n<span class=\"hljs-keyword\">const<\/span> sortedNumbers = numbers.toSorted(<span class=\"hljs-function\">(<span class=\"hljs-params\">n1, n2<\/span>) =&gt;<\/span> { \n  <span class=\"hljs-keyword\">return<\/span> n2 - n1; \n})\n<span class=\"hljs-comment\">\/\/ &#91;10, 9, 8, 7, 6, 5, 4, 3, 2, 1]<\/span>\n<span class=\"hljs-built_in\">console<\/span>.log(sortedNumbers)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Anche toSorted() pu\u00f2 essere applicato ad array di oggetti. In questo caso devi fornire una funzione comparatrice che utilizzi direttamente i dati degli oggetti, dato che non esiste un ordinamento naturale per gli oggetti:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">const<\/span> objs = &#91;{ <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Anna\"<\/span>, <span class=\"hljs-attr\">age<\/span>: <span class=\"hljs-number\">30<\/span> }, { <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Mario\"<\/span>, <span class=\"hljs-attr\">age<\/span>: <span class=\"hljs-number\">25<\/span> }, { <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Luigi\"<\/span>, <span class=\"hljs-attr\">age<\/span>: <span class=\"hljs-number\">40<\/span> }, { <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Lisa\"<\/span>, <span class=\"hljs-attr\">age<\/span>: <span class=\"hljs-number\">20<\/span> }];\n<span class=\"hljs-keyword\">const<\/span> sortedObjs = objects.toSorted(<span class=\"hljs-function\">(<span class=\"hljs-params\">o1, o2<\/span>) =&gt;<\/span> {\n  <span class=\"hljs-keyword\">return<\/span> o1.name.localeCompare(<span class=\"hljs-number\">02.n<\/span>ame) \n})\n\n<span class=\"hljs-comment\">\/\/&#91;{\"name\":\"Luigi\",\"age\":40},{\"name\":\"Mario\",\"age\":25},{\"name\":\"Anna\",\"age\":30},{\"name\":\"Lisa\",\"age\":20}]<\/span>\n<span class=\"hljs-built_in\">console<\/span>.log(sortedObjs)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"gb-headline gb-headline-c075f76f gb-headline-text\"><strong>toReversed()<\/strong><\/h2>\n\n\n\n<p>Come toSorted() per sort(), toReversed() \u00e8 il cugino di reverse().<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">const<\/span> months = &#91;<span class=\"hljs-string\">'January'<\/span>, <span class=\"hljs-string\">'February'<\/span>, <span class=\"hljs-string\">'March'<\/span>, <span class=\"hljs-string\">'April'<\/span>, <span class=\"hljs-string\">'May'<\/span>]\n\n<span class=\"hljs-comment\">\/\/ reverse(), l'array originale viene alterato<\/span>\n<span class=\"hljs-keyword\">const<\/span> reversedMonths = months.reverse()\n<span class=\"hljs-built_in\">console<\/span>.log(months) =&gt; &#91;<span class=\"hljs-string\">'May'<\/span>, <span class=\"hljs-string\">'April'<\/span>, <span class=\"hljs-string\">'March'<\/span>, <span class=\"hljs-string\">'February'<\/span>, <span class=\"hljs-string\">'January'<\/span>]\n<span class=\"hljs-built_in\">console<\/span>.log(reversedMonths) =&gt; &#91;<span class=\"hljs-string\">'May'<\/span>, <span class=\"hljs-string\">'April'<\/span>, <span class=\"hljs-string\">'March'<\/span>, <span class=\"hljs-string\">'February'<\/span>, <span class=\"hljs-string\">'January'<\/span>]\n\n<span class=\"hljs-comment\">\/\/ toReversed(), l'array originale rimane inalterato<\/span>\n<span class=\"hljs-keyword\">const<\/span> reversedMonths = months.toReversed()\n<span class=\"hljs-built_in\">console<\/span>.log(months) =&gt; &#91;<span class=\"hljs-string\">'January'<\/span>, <span class=\"hljs-string\">'February'<\/span>, <span class=\"hljs-string\">'March'<\/span>, <span class=\"hljs-string\">'April'<\/span>, <span class=\"hljs-string\">'May'<\/span>]\n<span class=\"hljs-built_in\">console<\/span>.log(reversedMonths) =&gt; &#91;<span class=\"hljs-string\">'May'<\/span>, <span class=\"hljs-string\">'April'<\/span>, <span class=\"hljs-string\">'March'<\/span>, <span class=\"hljs-string\">'February'<\/span>, <span class=\"hljs-string\">'January'<\/span>]\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"gb-headline gb-headline-17c83a01 gb-headline-text\"><strong>toSpliced()<\/strong><\/h2>\n\n\n\n<p>Come toSorted() per sort(), e toReversed() per reverese(). toSpliced() \u00e8 il cugino di splice().<\/p>\n\n\n\n<p>Quando si utilizza toSpliced, viene restituito un nuovo array, che riflette le modifiche desiderate, mentre splice restituisce un array contenente i valori rimossi.<\/p>\n\n\n\n<p>Questa distinzione rende toSpliced una scelta utile quando \u00e8 importante preservare l&#8217;array originale e quando si preferisce un approccio non distruttivo.<\/p>\n\n\n\n<p>Utilizzando toSpliced possiamo manipolare in modo sicuro gli array senza preoccuparci di modifiche involontarie ai dati originali, migliorando l&#8217;affidabilit\u00e0 e la manutenibilit\u00e0 del codice.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">const<\/span> colors = &#91;<span class=\"hljs-string\">\"red\"<\/span>, <span class=\"hljs-string\">\"orange\"<\/span>, <span class=\"hljs-string\">\"yellow\"<\/span>, <span class=\"hljs-string\">\"green\"<\/span>, <span class=\"hljs-string\">\"blue\"<\/span>, <span class=\"hljs-string\">\"purple\"<\/span>]\n<span class=\"hljs-comment\">\/\/ &#91;\"red\", \"orange\", \"pink\", \"cyan\", \"green\", \"blue\", \"purple\"]<\/span>\n<span class=\"hljs-keyword\">const<\/span> newColors = arr.toSpliced(<span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">1<\/span>, <span class=\"hljs-string\">\"pink\"<\/span>, <span class=\"hljs-string\">\"cyan\"<\/span>) \n\n<span class=\"hljs-comment\">\/\/ \u2018green\u2019<\/span>\n<span class=\"hljs-built_in\">console<\/span>.log(colors&#91;<span class=\"hljs-number\">3<\/span>])\n<span class=\"hljs-comment\">\/\/ 'cyan'<\/span>\n<span class=\"hljs-built_in\">console<\/span>.log(newColors&#91;<span class=\"hljs-number\">3<\/span>])\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>A differenza dei metodi precedenti, toSpliced() esiste unicamente per Array.prototype.&nbsp;<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-45edb3ff gb-headline-text\"><strong>with()<\/strong><\/h2>\n\n\n\n<p>L&#8217;aggiornamento degli elementi all&#8217;interno di un array \u00e8 un&#8217;operazione comune in JavaScript. Tuttavia, la modifica diretta degli elementi dell&#8217;array pu\u00f2 portare a effetti collaterali indesiderati. Il metodo with(), introdotto in ECMAScript 2023, offre un modo sicuro per aggiornare gli elementi in un array senza alterare l&#8217;array originale.<\/p>\n\n\n\n<p>Immaginiamo di avere un array di nomi utente e di voler aggiornare un nome utente specifico senza alterare l&#8217;array originale:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">const<\/span> usernames = &#91;<span class=\"hljs-string\">'Mario'<\/span>, <span class=\"hljs-string\">'Luigi'<\/span>, <span class=\"hljs-string\">'Anna'<\/span>]\n\n<span class=\"hljs-comment\">\/\/ vecchia modalit\u00e0 di aggiornamento<\/span>\nusernames&#91;<span class=\"hljs-number\">1<\/span>] = <span class=\"hljs-string\">'Peach'<\/span>\n<span class=\"hljs-built_in\">console<\/span>.log(usernames) <span class=\"hljs-comment\">\/\/ &#91;'Mario', 'Peaach', 'Anna']<\/span>\n\n<span class=\"hljs-comment\">\/\/ using with(), l'array originale rimane inalterato<\/span>\n<span class=\"hljs-keyword\">const<\/span> updatedUsernames = usernames.with(<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-string\">'Peach'<\/span>)\n<span class=\"hljs-built_in\">console<\/span>.log(usernames) =&gt; &#91;<span class=\"hljs-string\">'Mario'<\/span>, <span class=\"hljs-string\">'Luigi'<\/span>, <span class=\"hljs-string\">'Anna'<\/span>]\n<span class=\"hljs-built_in\">console<\/span>.log(updatedUsernames) <span class=\"hljs-comment\">\/\/ &#91;'Mario', 'Peach', 'Anna']<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"gb-headline gb-headline-5465d700 gb-headline-text\"><strong>Array e ricerche<\/strong><\/h2>\n\n\n\n<p>Lavorare con gli array spesso implica la ricerca di elementi specifici. Il metodo find \u00e8 stato introdotto per semplificare questo processo, ma restituisce solo il primo elemento corrispondente ad un criterio di ricerca. Tuttavia, alcuni scenari richiedono di cercare dalla fine dell&#8217;array per trovare l&#8217;ultimo elemento corrispondente. \u00c8 qui che entrano in gioco i nuovi metodi findLast e findLastIndex.<\/p>\n\n\n\n<p>Esistono scenari in cui la ricerca dall&#8217;ultimo elemento \u00e8 pi\u00f9 pratica:<\/p>\n\n\n\n<p>Registri basati sul tempo: immagina una serie di voci di registro ordinate per timestamp. Se vogliamo trovare l&#8217;ultima voce di registro di un utente specifico, la ricerca dalla fine garantisce di ottenere la voce pi\u00f9 recente.<\/p>\n\n\n\n<p>Coda con priorit\u00e0 inversa: in alcuni casi, potremmo mantenere una coda con priorit\u00e0 in cui gli elementi pi\u00f9 recenti hanno una priorit\u00e0 pi\u00f9 alta. Quando si recuperano elementi con la massima priorit\u00e0, la ricerca dall&#8217;ultimo elemento garantisce di ottenere l&#8217;ultimo elemento con alta priorit\u00e0.<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-4bfa054c gb-headline-text\"><strong>findLast()<\/strong><\/h2>\n\n\n\n<p>Il metodo findLast() ti consente di ottenere l&#8217;istanza finale di un elemento corrispondente da un array. Se non viene trovato alcun elemento corrispondente, restituisce undefined. Nell&#8217;esempio seguente vediamo come trovare l&#8217;ultimo numero pari dell&#8217;array:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">const<\/span> numbers = &#91;<span class=\"hljs-number\">17<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">87<\/span>, <span class=\"hljs-number\">14<\/span>, <span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">11<\/span>];\n\n<span class=\"hljs-keyword\">const<\/span> lastEven = numbers.findLast(<span class=\"hljs-function\">(<span class=\"hljs-params\">number<\/span>) =&gt;<\/span> {\n  <span class=\"hljs-keyword\">return<\/span> number % <span class=\"hljs-number\">2<\/span> === <span class=\"hljs-number\">0<\/span>\n})\n\n<span class=\"hljs-built_in\">console<\/span>.log(lastEven) <span class=\"hljs-comment\">\/\/ 100<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>findLast() supporta anche il passaggio di un &#8220;thisArg&#8221; per impostare il contesto del this nella funzione.<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-3401ebab gb-headline-text\"><strong>findLastIndex()<\/strong><\/h2>\n\n\n\n<p>Allo stesso modo, il metodo findLastIndex() pu\u00f2 essere utile quando dobbiamo trovare l&#8217;indice dell&#8217;ultimo elemento che soddisfa una condizione. Nell&#8217;esempio seguente vediamo come trovare l&#8217;ultimo numero dell&#8217;array divisibile per 10:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">const<\/span> numbers = &#91;<span class=\"hljs-number\">17<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">87<\/span>, <span class=\"hljs-number\">14<\/span>, <span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">11<\/span>];\nnumbers.findLastIndex(<span class=\"hljs-function\"><span class=\"hljs-params\">number<\/span> =&gt;<\/span> number % <span class=\"hljs-number\">10<\/span> === <span class=\"hljs-number\">0<\/span>); <span class=\"hljs-comment\">\/\/ 100<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"gb-headline gb-headline-e7798137 gb-headline-text\"><strong>Supporto per lo la grammatica Hashbang (notazione shebang)<\/strong><\/h2>\n\n\n\n<p>L&#8217;introduzione della Hashbang Grammar in ECMAScript 2023 ci consente di utilizzare la notazione shebang (#!) nel codice sorgente. Questa funzionalit\u00e0 semplifica la distinzione tra script e moduli e fornisce una migliore compatibilit\u00e0 con gli strumenti di creazione e rende Javascript coerente con altri linguaggi.<\/p>\n\n\n\n<p>Uno shebang \u00e8 una notazione Unix vecchia scuola costituito un hashtag seguito da un punto esclamativo: #! (dove &#8220;bang&#8221; \u00e8 slang per &#8220;!&#8221;). Da tempo immemorabile, un commento all&#8217;inizio di un file che inizia con #! dice alla shell che si tratta di uno script eseguibile e quale motore usare per eseguirlo.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-meta\">#!\/usr\/bin\/env node<\/span>\n<span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">\"Hello, world!\"<\/span>)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Questo script dice al sistema operativo di utilizzare Node per eseguire questo script. Ora puoi semplicemente digitare .\/hello.js per eseguirlo.&nbsp;<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-69b2a948 gb-headline-text\"><strong>Simboli come chiavi delle WeakMap: un passo avanti nella gestione della memoria<\/strong><\/h2>\n\n\n\n<p>Una delle caratteristiche principali introdotte in ES14 \u00e8 l&#8217;espansione di ci\u00f2 che pu\u00f2 essere utilizzato come chiavi nelle WeakMap. Ma prima di addentrarci nelle novit\u00e0, facciamo un passo indietro e comprendiamo cosa sono le WeakMap.<\/p>\n\n\n\n<p>In programmazione, un riferimento debole \u00e8 un tipo di riferimento che pu\u00f2 essere eliminato dalla garbage collection, al contrario di un riferimento forte. Questa caratteristica \u00e8 particolarmente utile in certi scenari per prevenire perdite di memoria.<\/p>\n\n\n\n<p>Prima di ES14, solo gli oggetti potevano essere utilizzati come chiavi in raccolte come WeakMap. Tuttavia, con l&#8217;introduzione delle nuove specifiche, ora \u00e8 possibile utilizzare la maggior parte dei simboli come chiavi.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">const<\/span> weakMap = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">WeakMap<\/span>();\n<span class=\"hljs-keyword\">const<\/span> keySymbol = <span class=\"hljs-built_in\">Symbol<\/span>(<span class=\"hljs-string\">'key'<\/span>);\n\nweakMap.set(keySymbol, <span class=\"hljs-string\">'value'<\/span>);\n\n<span class=\"hljs-comment\">\/\/ Da qualche parte nel codice, perdiamo il riferimento a keySymbol<\/span>\n<span class=\"hljs-comment\">\/\/ La garbage collection riconoscer\u00e0 che non ci sono pi\u00f9 riferimenti a keySymbol<\/span>\n<span class=\"hljs-comment\">\/\/ e pulir\u00e0 automaticamente la voce corrispondente nel WeakMap.<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Questa nuance sembra minore, ma ha profonde implicazioni sulla gestione della memoria e sulla prevenzione delle perdite di memoria. La capacit\u00e0 di utilizzare simboli come chiavi amplia le possibilit\u00e0 per gli sviluppatori e offre una flessibilit\u00e0 senza precedenti nella gestione delle WeakMap.<\/p>\n\n\n\n<h2 class=\"gb-headline gb-headline-317d3065 gb-headline-text\"><strong>Conclusione e sguardo al futuro<\/strong><\/h2>\n\n\n\n<p>Sebbene il 2023 non abbia portato cambiamenti rivoluzionari in JavaScript, ECMAScript 2023 (ES14) ha consolidato ulteriormente il linguaggio, rendendolo ancora pi\u00f9 potente, flessibile e adattabile alle esigenze contemporanee. Con l&#8217;evoluzione continua del web e l&#8217;importanza sempre maggiore di JavaScript nel panorama della programmazione, possiamo aspettarci che le future versioni del linguaggio portino ancora pi\u00f9 innovazioni e miglioramenti. E con l&#8217;attesa di nuove funzionalit\u00e0, come l&#8217;API temporale per la gestione dei datetime (Temporal), il futuro di JavaScript sembra pi\u00f9 luminoso che mai.<\/p>\n\n\n<p><script src=\"https:\/\/codemotion.activehosted.com\/f\/embed.php?id=42\" type=\"text\/javascript\" charset=\"utf-8\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il mondo del web e dello sviluppo software ha visto la crescita esponenziale e la maturazione di JavaScript come uno dei linguaggi di programmazione pi\u00f9 influenti e onnipresenti. Fin dai suoi umili inizi nei primi giorni del web, quando era usato principalmente per aggiungere interattivit\u00e0 di base alle pagine web, JavaScript ha percorso una strada&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/\">Read more<\/a><\/p>\n","protected":false},"author":94,"featured_media":22731,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10263],"tags":[10327,10438],"collections":[],"class_list":{"0":"post-23840","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend-it","8":"tag-javascript-it","9":"tag-sviluppo-software-it","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>ECMAScript 2023 (ES14): le novit\u00e0 e gli aggiornamenti<\/title>\n<meta name=\"description\" content=\"In questo articolo procederemo a fornire una panoramica delle novit\u00e0 di ECMAScript e di come queste influenzeranno lo sviluppo in JavaScript.\" \/>\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.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ECMAScript 2023 (ES14): un&#039;analisi approfondita delle novit\u00e0 e degli aggiornamenti\" \/>\n<meta property=\"og:description\" content=\"In questo articolo procederemo a fornire una panoramica delle novit\u00e0 di ECMAScript e di come queste influenzeranno lo sviluppo in JavaScript.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-13T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-10T12:02:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Riccardo Degni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Riccardo Degni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/\"},\"author\":{\"name\":\"Riccardo Degni\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6912e00a94efa41fb20e92ba1bb050fb\"},\"headline\":\"ECMAScript 2023 (ES14): un&#8217;analisi approfondita delle novit\u00e0 e degli aggiornamenti\",\"datePublished\":\"2023-10-13T07:00:00+00:00\",\"dateModified\":\"2023-11-10T12:02:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/\"},\"wordCount\":1626,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg\",\"keywords\":[\"JavaScript\",\"sviluppo software\"],\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/\",\"name\":\"ECMAScript 2023 (ES14): le novit\u00e0 e gli aggiornamenti\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg\",\"datePublished\":\"2023-10-13T07:00:00+00:00\",\"dateModified\":\"2023-11-10T12:02:37+00:00\",\"description\":\"In questo articolo procederemo a fornire una panoramica delle novit\u00e0 di ECMAScript e di come queste influenzeranno lo sviluppo in JavaScript.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg\",\"width\":2560,\"height\":1707,\"caption\":\"Data scientist\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"ECMAScript 2023 (ES14): un&#8217;analisi approfondita delle novit\u00e0 e degli aggiornamenti\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6912e00a94efa41fb20e92ba1bb050fb\",\"name\":\"Riccardo Degni\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/10\/rd-image-book-pic-e1697717445644-150x150.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/10\/rd-image-book-pic-e1697717445644-150x150.jpg\",\"caption\":\"Riccardo Degni\"},\"description\":\"I am a senior web developer, active both on front-end and back-end, a teacher focused on modern programming, a Research Consultant for IT research, and a writer who creates programming articles and guides. I am both a developer with a strong foundation in new technologies such as full Javascript-based environments and object-oriented programming on the server-side (PHP, Node, and Java), and a designer who makes powerful, modern, fully-responsive, and WordPress-free templates.\",\"sameAs\":[\"http:\/\/www.riccardodegni.com\/\",\"https:\/\/www.linkedin.com\/in\/riccardodegni\/\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/riccardo-degni\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ECMAScript 2023 (ES14): le novit\u00e0 e gli aggiornamenti","description":"In questo articolo procederemo a fornire una panoramica delle novit\u00e0 di ECMAScript e di come queste influenzeranno lo sviluppo in JavaScript.","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.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/","og_locale":"en_US","og_type":"article","og_title":"ECMAScript 2023 (ES14): un'analisi approfondita delle novit\u00e0 e degli aggiornamenti","og_description":"In questo articolo procederemo a fornire una panoramica delle novit\u00e0 di ECMAScript e di come queste influenzeranno lo sviluppo in JavaScript.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2023-10-13T07:00:00+00:00","article_modified_time":"2023-11-10T12:02:37+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg","type":"image\/jpeg"}],"author":"Riccardo Degni","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Riccardo Degni","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/"},"author":{"name":"Riccardo Degni","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6912e00a94efa41fb20e92ba1bb050fb"},"headline":"ECMAScript 2023 (ES14): un&#8217;analisi approfondita delle novit\u00e0 e degli aggiornamenti","datePublished":"2023-10-13T07:00:00+00:00","dateModified":"2023-11-10T12:02:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/"},"wordCount":1626,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg","keywords":["JavaScript","sviluppo software"],"articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/","name":"ECMAScript 2023 (ES14): le novit\u00e0 e gli aggiornamenti","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg","datePublished":"2023-10-13T07:00:00+00:00","dateModified":"2023-11-10T12:02:37+00:00","description":"In questo articolo procederemo a fornire una panoramica delle novit\u00e0 di ECMAScript e di come queste influenzeranno lo sviluppo in JavaScript.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg","width":2560,"height":1707,"caption":"Data scientist"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/ecmascript-2023-es14-unanalisi-approfondita-delle-novita-e-degli-aggiornamenti\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/"},{"@type":"ListItem","position":3,"name":"ECMAScript 2023 (ES14): un&#8217;analisi approfondita delle novit\u00e0 e degli aggiornamenti"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6912e00a94efa41fb20e92ba1bb050fb","name":"Riccardo Degni","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/10\/rd-image-book-pic-e1697717445644-150x150.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/10\/rd-image-book-pic-e1697717445644-150x150.jpg","caption":"Riccardo Degni"},"description":"I am a senior web developer, active both on front-end and back-end, a teacher focused on modern programming, a Research Consultant for IT research, and a writer who creates programming articles and guides. I am both a developer with a strong foundation in new technologies such as full Javascript-based environments and object-oriented programming on the server-side (PHP, Node, and Java), and a designer who makes powerful, modern, fully-responsive, and WordPress-free templates.","sameAs":["http:\/\/www.riccardodegni.com\/","https:\/\/www.linkedin.com\/in\/riccardodegni\/"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/riccardo-degni\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-600x600.jpg","author_info":{"display_name":"Riccardo Degni","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/riccardo-degni\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg",2560,1707,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-768x512.jpg",768,512,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-1024x683.jpg",1024,683,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-1536x1024.jpg",1536,1024,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-2048x1365.jpg",2048,1365,true],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-scaled.jpg",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/08\/4905827-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Riccardo Degni","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/riccardo-degni\/"},"uagb_comment_info":0,"uagb_excerpt":"Il mondo del web e dello sviluppo software ha visto la crescita esponenziale e la maturazione di JavaScript come uno dei linguaggi di programmazione pi\u00f9 influenti e onnipresenti. Fin dai suoi umili inizi nei primi giorni del web, quando era usato principalmente per aggiungere interattivit\u00e0 di base alle pagine web, JavaScript ha percorso una strada&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/23840","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/94"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=23840"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/23840\/revisions"}],"predecessor-version":[{"id":24489,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/23840\/revisions\/24489"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/22731"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=23840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=23840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=23840"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=23840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}