JavaScript domina il web e ECMAScript, il nucleo del linguaggio, sta maturando. La nuova specifica (ES6 o JS2), prevista per la metà dell'anno, introduce numerose innovazioni che possono già essere testate. Firefox offre attualmente il miglior supporto , ma sono possibili anche polyfill tramite transpiler come Google Traceur . Segue una breve panoramica delle nuove funzionalità di ES6.
La nuova parola chiave let fa molte cose meglio di var : lo scope ora si comporta esattamente come in altri linguaggi (C/C++, Java), motivo per cui ora anche i blocchi hanno un proprio scope. Verrà riparato anche l'hoisting, ovvero la priorizzazione delle dichiarazioni di variabili (non delle assegnazioni di valori) nell'ambito del rispettivo ambito:
console.log(x); var x = 'foo'; // undefined console.log(y); let y = 'bar'; // not initialized
Il numero di altre innovazioni è ampio: costanti (const), valori predefiniti per le funzioni (function pow(a,b=2) { return Math.pow(a,b); }), una nuova notazione per le funzioni (let pow = (a,b=2) => Math.pow(a,b);), una varietà di nuove funzioni (repeat(), contiene(), opensWith(), find(), findIndex()), la nuova costruzione del ciclo per ... of.
Da menzionare anche i nuovi tipi di dati Set, Map, Proxy e Symbol, la possibilità di importare (parti di altri) file JavaScript con import e una nuova sintassi intuitiva per classi ed ereditarietà. Ma spesso ci sono anche cose piccole ma attese da tempo come la possibilità di interruzioni di riga nelle stringhe letterali (notare le virgolette speciali):
`foo bar`
JavaScript è da tempo molto più di un semplice strumento per piccoli trucchetti web: viene utilizzato per creare applicazioni web potenti e performanti, altrettanto valide delle loro controparti desktop. Grazie all'abbondanza di nuove utili funzionalità e al supporto già esistente per ES6, programmare è diventato ancora più piacevole.
Chi non ha sempre voluto verificare l'uguaglianza di due numeri con l'aiuto della nuova costante Number.EPSILON , il cui valore porta la differenza tra 1 e il successivo valore in virgola mobile più alto?
let cmp = (a,b) => Math.abs(a-b) < Number.EPSILON;