In questo tutorial potrete conoscere le nuove funzionalità nella versione più recente di JavaScript.
Cos’è ECMAScript 6 (o ES6)
ECMAScript 2015 (o ES6) è la sesta e principale edizione dello standard di specifica del linguaggio ECMAScript. Definisce lo standard per l’implementazione JavaScript.
ES6 ha apportato modifiche significative al linguaggio JavaScript., Introduce diverse nuove funzionalità come variabili con ambito di blocco, nuovo ciclo per l’iterazione su array e oggetti, modelli letterali e molti altri miglioramenti per rendere la programmazione JavaScript più semplice e divertente. In questo capitolo, discuteremo alcune delle migliori funzionalità ES6 che è possibile utilizzare nella codifica JavaScript di tutti i giorni.
La parola chiave let
ES6 introduce la nuova parola chiavelet
per dichiarare le variabili. Prima di ES6, l’unico modo per dichiarare una variabile in JavaScript era la parola chiave var
., Vediamo qual è la differenza tra loro è.
Esistono due differenze critiche tra var
e let
. Le variabili dichiarate con la parola chiavevar
sono con ambito di funzione e issate in alto all’interno del suo ambito, mentre le variabili dichiarate con la parola chiavelet
sono con ambito di blocco ({}
) e non sono issate.
Blocco scoping significa semplicemente che un nuovo ambito viene creato tra una coppia di parentesi graffe cioè{}
., Pertanto, se si dichiara una variabile con il let
parola chiave all’interno di un ciclo, non esiste al di fuori del ciclo, come illustrato nell’esempio seguente:
Come si può vedere nell’esempio precedente, la variabile i
il primo blocco non è accessibile al di fuori del for
loop. Ciò ci consente anche di riutilizzare lo stesso nome di variabile più volte in quanto il suo ambito è limitato al blocco ({}
), il che si traduce in meno dichiarazione di variabile e codice più pulito.,
La parola chiave const
La nuova parola chiaveconst
consente di definire costanti. Le costanti sono di sola lettura, non è possibile riassegnare loro nuovi valori. Sono anche con ambito di blocco come let
.
Esempio
Prova questo codice ”
const PI = 3.14;console.log(PI); // 3.14PI = 10; // error
Tuttavia, puoi ancora modificare le proprietà dell’oggetto o gli elementi dell’array:
Il for…di Loop
Il nuovo ciclofor...of
ci permette di iterare su array o altri oggetti iterabili molto facilmente., Inoltre, il codice all’interno del ciclo viene eseguito per ogni elemento dell’oggetto iterabile. Ecco un esempio:
Il ciclo for...of
non funziona con gli oggetti perché non sono iterabili. Se si desidera scorrere le proprietà di un oggetto, è possibile utilizzare il ciclo for-in
.
Modello letterali
Modello letterali forniscono un modo semplice e pulito creare stringhe multi-linea ed eseguire l’interpolazione delle stringhe. Ora possiamo incorporare variabili o espressioni in una stringa in qualsiasi punto senza problemi.,
I letterali del modello vengono creati usando il carattere back-tick (` `
) (accento grave) invece delle solite virgolette doppie o singole. Le variabili o le espressioni possono essere posizionate all’interno della stringa utilizzando la sintassi ${...}
. Confronta i seguenti esempi e vedi quanto è utile:
Mentre in ES5, per ottenere lo stesso, abbiamo dovuto scrivere qualcosa del genere:
Valori predefiniti per i parametri di funzione
Ora, in ES6 è possibile specificare i valori predefiniti per i parametri di funzione., Ciò significa che se non vengono forniti argomenti per funzionare quando viene chiamato, verranno utilizzati i valori dei parametri predefiniti. Questa è una delle caratteristiche più attese in JavaScript. Ecco un esempio:
Mentre in ES5, per ottenere lo stesso abbiamo dovuto scrivere qualcosa del genere:
Funzioni freccia
Le funzioni freccia sono un’altra caratteristica interessante in ES6. Fornisce una sintassi più concisa per la scrittura di espressioni di funzione optando per le parole chiavefunction
ereturn
.,
Le funzioni freccia sono definite utilizzando una nuova sintassi, la notazione fat arrow (=>
). Vediamo come appare:
Come puoi vedere non c’èfunction
ereturn
parola chiave nella dichiarazione della funzione freccia.
Puoi anche saltare le parentesi cioè()
nel caso in cui ci sia esattamente un parametro, ma dovrai sempre usarlo quando hai zero o più di un parametro.,
Inoltre, se c’è più di un’espressione nel corpo della funzione, è necessario avvolgerla tra parentesi graffe ({}
). In questo caso è anche necessario utilizzare l’istruzione return
per restituire un valore.
Esistono diverse varianti di come è possibile scrivere funzioni freccia. Ecco i più comunemente usati:
C’è un’importante differenza tra le funzioni regolari e le funzioni freccia., A differenza di una funzione normale, una funzione freccia non ha il propriothis
, prendethis
dalla funzione esterna in cui è definita. In JavaScript,this
è il contesto di esecuzione corrente di una funzione.,
Per capire questo, chiaramente, facciamo il check-out le seguenti esempi:
Riscrivere lo stesso esempio con ES6 modello di valori letterali e freccia funzione:
Come si può vedere chiaramente, il this
parola chiave nell’esempio di cui sopra si riferisce al contesto della funzione allegando la freccia funzione che è oggetto di Persona (linea n-9), a differenza dell’esempio precedente in cui di cui all’oggetto globale Window (linea n-9).
Classi
In ECMAScript 5 e versioni precedenti, le classi non sono mai esistite in JavaScript., Le classi sono introdotte in ES6 che sembra simile alle classi in altri linguaggi orientati agli oggetti, come Java, PHP, ecc., tuttavia non funzionano esattamente allo stesso modo. Le classi ES6 semplificano la creazione di oggetti, implementano l’ereditarietà utilizzando la parola chiaveextends
e riutilizzano il codice.
In ES6 puoi dichiarare una classe usando la nuova parola chiaveclass
seguita da un nome-classe. Per convenzione i nomi delle classi sono scritti in TitleCase (cioè capitalizzando la prima lettera di ogni parola).,
Nell’esempio precedente la classe Square eredita da Rectangle usando la parola chiave extends
. Le classi che ereditano da altre classi sono indicate come classi derivate o classi figlio.
Inoltre, è necessario chiamare super()
nel costruttore della classe figlio prima di accedere al contesto (this
)., Ad esempio, se si omette il metodo super()
e si chiama il metodo getArea()
sull’oggetto quadrato si verificherà un errore, poiché il metodo getArea()
richiede l’accesso alla parola chiave this
.
Nota: a differenza delle dichiarazioni di funzione, le dichiarazioni di classe non vengono sollevate. Le dichiarazioni di classe risiedono nella zona morta temporale (TDZ) fino a quando l’esecuzione raggiunge il punto della dichiarazione di classe, simile alle dichiarazioni let
e const
., Pertanto, è necessario dichiarare la classe prima di accedervi, altrimenti si verificherà un ReferenceError.
Moduli
Prima di ES6, non esisteva alcun supporto nativo per i moduli in JavaScript. Tutto all’interno di un’applicazione JavaScript, ad esempio variabili su diversi file JavaScript, condivideva lo stesso ambito.
ES6 introduce il modulo basato su file, in cui ogni modulo è rappresentato da un file .js
separato., Ora, è possibile utilizzare l’istruzioneexport
oimport
in un modulo per esportare o importare variabili, funzioni, classi o qualsiasi altra entità da/verso altri moduli o file.
Creiamo un modulo cioè un file JavaScript ” main.js ” e inserire il seguente codice in esso:
Ora creare un altro file JavaScript “app.js ” con il seguente codice:
Infine creare un file HTML “test.html ” e con il seguente codice e aprire questo file HTML nel browser utilizzando il protocollo HTTP (o utilizzare localhost). Si noti inoltre iltype="module"
sul tag script.,
I parametri Rest
ES6 introduce i parametri rest che ci permettono di passare un numero arbitrario di parametri a una funzione sotto forma di array. Ciò è particolarmente utile in situazioni in cui si desidera passare i parametri a una funzione, ma non si ha idea di quanti ne avrete bisogno.
Un parametro rest viene specificato prefissando un parametro denominato con operatore rest (...
) cioè tre punti. Il parametro Rest può essere solo l’ultimo nell’elenco dei parametri e può esserci solo un parametro rest., Date un’occhiata al seguente esempio, per vedere come funziona:
Quando il parametro rest è l’unico parametro in una funzione, ottiene tutti gli argomenti passati alla funzione, altrimenti ottiene il resto degli argomenti che supera il numero di parametri denominati.
Nota: non confondere i parametri del termine rest con il REST (REpresentational State Transfer). Questo non ha nulla a che fare con i servizi web RESTful.,
L’operatore Spread
L’operatore spread, che è anche indicato con (...
), svolge la funzione esattamente opposta dell’operatore rest. La diffusione operatore spread out (cioè divide) un array e passa i valori in funzione specificata, come mostrato nel seguente esempio:
La diffusione operatore può essere utilizzato anche per inserire gli elementi di un array in un altro array senza l’utilizzo di array di metodi come push()
unshift()
concat()
, etc.,
Assegnazione destrutturazione
L’assegnazione destrutturazione è un’espressione che rende facile estrarre valori da array, o proprietà da oggetti, in variabili distinte fornendo una sintassi più breve.
Esistono due tipi di espressioni di assegnazione di destrutturazione: l’assegnazione di matrice e oggetto destrutturazione.,fare la stessa cosa con solo una linea utilizzando la matrice di destrutturazione di assegnazione:
È possibile utilizzare anche il resto dell’operatore nella matrice destrutturazione di assegnazione, come indicato di seguito:
L’oggetto destrutturazione di assegnazione
In ES5 per estrarre i valori delle proprietà di un oggetto di cui abbiamo bisogno per scrivere qualcosa di simile a questo:
Ma in ES6, è possibile estrarre i valori delle proprietà dell’oggetto e assegnare loro le variabili facilmente come questo:
la Maggior parte delle caratteristiche di cui abbiamo parlato sopra sono supportati nelle ultime versioni dei principali browser web come Google Chrome, Mozilla Firefox, Microsoft Bordo, Safari, etc.,