New syntax supports declaration of classes.
Promises allow easier and cleaner asynchronous coding. Promise constructors are supported, along with the all and race utility methods.
The arrow function (=>) provides shorthand syntax for the function keyword which features a lexical this binding.
New methods for built-in objects
Object literal enhancements
Proxies enable custom behavior for objects.
The spread operator (…) expands iterable expressions into individual arguments. For example, a.b(…array) is approximately the same as a.b.apply(a, array).
Symbol objects allow properties to be added to existing objects with no possibility of interference with the existing object properties, with no unintended visibility, and with no other uncoordinated additions by other code.
Template strings are string literals that allow for expressions to be evaluated and concatenated with the string literal.
A WeakSet is a collection of objects that will be garbage collected if they are not referenced anywhere else.