Scoped variables Block scoped variable assignments with let let let let and const const const const. > Organized code! if(true){ let v = 42; } console.log(v); // ReferenceError: v is not defined // constants const pi = 3.14156; pi = 3.14; // SyntaxError: invalid assignment to const pi
with arrow syntax, and more… [1,2,3].reduce(function(a, b) { return a+b; }); // the syntax [1,2,3].reduce((a,b) => { console.log("oO"); return a+b; }); // 6 // and even shorter [1,2,3].reduce((a,b) => a+b);
functions share the same context with their surrounding code; the context can’t be modified can’t be modified can’t be modified can’t be modified via call, apply nor bind. var team = { n: "Justice League", people: ["Batman", "..."], logMember() { // arrows have the same context (this) of their surrounding code. this.people.forEach(p => console.log(p + " is member of the " + this.n)); } } team.logMember(); // Batman is member of the Justice League
are a simple sugar over the prototype-based OO pattern. class Animal { constructor(name) { this.name = name; } getName() { return this.name; } } var pet = new Animal("foo"); pet instanceof Animal // true pet.getName(); // foo
can have non-string property. * At the end, the requisite of privateness for Symbol properties was dropped. Symbolic properties are just non-enumerable. A new primitive type was created for this purpose, Symbol Symbol Symbol Symbol.
... Of is a new loop construct. It allows to loop over the values of an Iterable collection. A collection is Iterable if has a Symbol property Symbol.iterator that returns an Iterator. An Iterator Iterator Iterator Iterator is an object with a next method that returns a { done, value } tuple.
Of loop Iterators & For ... Of loop Iterators & For ... Of loop For ... Of For ... Of For ... Of For ... Of loop over values of an iterable collection. var collection = ["a", "b", "c", "d", "e", "f", "g"]; for(value of collection){ console.log(value); } // "a", "b", "c", "d", "e", "f", "g"
which can be interrupted, and then resumed, used to create Iterators. The yield yield yield yield operator is used to interrupt the execution. The generator execution resumes when the iterator’s next next next next method is called. collection[Symbol.iterator] = function* () { for (let i=0; i<this.length; i++) { if (i%2 === 0) yield this[i]; } }; for(value of collection){ console.log(value); } // "a", "c", "e", "g"
* Set has a rich prototype that expose method to work with the set instance. var arr = [1, 2, 2, 3, 3, 3, 4]; var set = new Set(arr); set; // Set {1, 2, 3, 4}
tuples, without duplicated keys. * Map has a rich prototype that expose method to work with the map instance. var arr = [ [1, "first"], [1, "one"], [2, "two"] ]; var map = new Map(arr); map; // Map { 1: "one", 2: "two" }