Valerio Como

← Back to blog

Published on Mon Apr 06 2020 09:20:00 GMT+0000 (Coordinated Universal Time) by Valerio Como

ES2020

Javascript ECMAScript 2020

ES2020

Le specifiche ECMAScript 2020 sono state rese pubbliche e portano con se una serie di novità.

String.prototype.matchAll

matchAll() effettua il match di tutte le occorrenze in una stringa, in analogia a match(), restituendo un oggetto di tipo RegExpStringIterator.

matchAll() si sposa bene con l’utilizzo di espressioni regolari con named capture groups.

MatchAll() example taken from https://v8.dev/features/string-matchall

L’iteratore restituisce un oggetto per ogni match, arricchito con informazioni come l’indice o i named capture groups.

Dynamic Import

Il supporto agli import dinamici introduce un costrutto function-like per effettuare l’importazione. import() importa moduli dinamicamente, consentendo l’addizione a runtime di nuovi moduli in modo programmatico e condizionale.

import(module) restituisce una Promise per l’oggetto del modulo, il quale verrà istanziato alla risoluzione della Promise stessa.

Dynamic Import

Promise & dynamic import

Restituendo una Promise, import può essere utilizzato anche con async/await.

async/await & dynamic import

Gli import dinamici abilitano il supporto nativo al lazy loading dei moduli.

BigInt

BigInt è un nuovo tipo primitivo di Javascript, il quale consente di rappresentare interi con precisione arbitraria. BigInt è in grado di rappresentare valori numerici superiori a Number.MAX_SAFE_INTEGER,(2**53–1) e consente di svolgere calcoli su interi senza pericolo di overflow.

BigInt

GlobalThis

La keyword globalThis mette un po’ di ordine nel mondo Javascript. A seconda del suo environment, il this di Javascript corrisponde a diversi oggetti. Nel browser è il riferimento a Window, in nodeJS a global, in un worker a self.

La nuova parola chiave del linguaggio introduce un modo unificato per accedere al this globale in ogni tipo di environment Javascript.

Promise.allSettled()

ES2020 porta con se una nuova API per gestire le Promise. Oltre ai metodi race() e all(), l’oggetto Promise è stato arricchito di un nuovo superpotere: allSettled().

Promise.allSettled()

Il nuovo costrutto consente la gestione di tutte le promise nel momento in cui vengono risolte, a prescindere che la loro risoluzione abbia avuto successo o no.

Optional chaining

Se lavorate con Typescript, questo nuovo operatore vi suonerà familiare. Consente di accedere alle proprietà in modo sicuro, evitando referenze a null.

Optional chaining operator

L’utilizzo di optional chaining evita la scrittura di codice molto verboso e l’adozione diffusa aumenta la leggibilità della codebase.

Nullish coalescing

Il nullish coalescing operator (??), detto anche Elvis operator, aggiunge un syntactic sugar per gestire i valori di default. Già approdato nel mondo Typescript dalla versione 3.7, ES2020 ingloba il supporto nativo di questo operatore.

Il comportamento di ?? è simile all’operatore ||, con la differenza che Elvis operator non usa i valori truthy, ma utilizza il concetto di nullish. Ovvero, il valore è nullish se sono strettamente nulli, ovvero undefined o null.

Ecco un esempio esplicativo:

Nullish coalescing operator

Namespace export

Sarà possibile esportare un namespace con un altro nome.

Namespace export

Written by Valerio Como

← Back to blog