Un primo cambiamento (del quale sono personalmente molto contento :) ) riguarda l'OOP, che non è una novità dato che oggetti, ereditarietà e quant'altro erano già presenti, ma spesso di difficile utilizzo e interpretazione (soprattutto per chi proviene da linguaggi quali C#, Java).
Esempio di "vecchio" e "nuovo" codice:
---------------------------------------------------
/* JavaScript 1.x "Class" Definition*/
function Foo() {
this.a = "a";
this.b = "b";
}
var myFoo = new Foo(); // class instantiation
/* JavaScript 2.0 Class Definition */
class Bar {
this.a = "a";
this.b = "b";
}
var myBar = new Bar(); // class instantiation
---------------------------------------------------
Compilazione più rigida, controllo dell'integrità di alcuni aspetti prima dell'esecuzione:
- Type Checking statico
- Verifica dei nomi utilizzati per verificare che siano conosciuti
- Verifica di assegnamenti illegali a costanti
- Assicurarsi che eventuali comparazioni sono fatte tra tipi validi
Nuovi cambiamenti nelle già citate costanti, che vengono introdotte per mezzo della parola chiave const, per cui non ci sarà più bisogno di "affidarsi" a convenzioni sui nomi.
E molto altro.... un interessante articolo che affronta altre caratteristiche è consultabile a questo indirizzo.