Modules: Provides a new and clean way to split up your JS code into smaller segments and re-use some functionality in other parts of application, all instead of relying on various libraries.
Maps and Sets: Yet another refinement in how the code is structured to run more efficiently and intuitively. “Map” is an object that is a simple key/value map. Any value (both objects and primitive values) may be used as either a key or a valuelisted. The “Set” function lets you store unique values of any type, whether primitive values or object references.
Iterators: Music to the ears of all object-oriented programmers. This functionality is the classic “for-of loop” – special functions that help you iterate over a custom object.
Generators: Provides a better way to create iterators. Each call to next() executes the function body until the next yield.
Let and Const: This is a much needed and long overdue functionality. “Let” allows you to lock a variable in scope so it’s not accessible outside that scope; let is for variables. “Const” allows for the creation of constants and ensure its value won’t be changed throughout the application.
Arrow Functions: Offer a much cleaner approach for specifying one-line functions.
There are many, many more changes included in the EC6 update. The wiki on this describes the overriding aim of this latest upgrade as follows:
The Sixth Edition adds significant new syntax for writing complex applications, including classes and modules, but defines them semantically in the same terms as ECMAScript 5 strict mode. Other new features include iterators and for/of loops, Python-style generators and generator expressions, arrow functions, binary data, collections (maps, sets and weak maps), and proxies (metaprogramming for virtual objects and wrappers). As the first “ECMAScript Harmony” specification, it is also known as “ES6 Harmony”.