17 июня 2015 года генеральное собрание Ecma International официально одобрило стандарт ECMA-262 6 версии
"В ES5 \n - это перенос строки."
`В ES6 стало возможнымписать так.`
var name = 'John', age = 22;`${name} is ${age} years old`
Спецификация 12.2.9, 12.3.7
function f() {
let x;
{
const x = "sneaky"; // ok, block scoped name
x = "foo"; // error, const
}
let x = "inner"; // error, already declared in block
}
Спецификация 13.2.1
var a = {'obj1': obj1, 'obj2': obj2}// аналогичноvar a = {obj1, obj2}
Спецификация 13.2.1
function f(x, y=12) {return x + y;}f(3) == 15 //true
Спецификация 19.2
Спецификация 15.2
Позволяют загружать код по требованию (асинхронно) и обеспечивают уровень абстракции
// calculator/lib/calc.jslet notExported = 'abc';export function square(x) {return x * x;}export const MY_CONSTANT = 123;
// calculator/main.jsimport { square } from 'lib/calc';console.log(square(3));
import { square, MY_CONSTANT } from 'lib/calc';import 'lib/calc' as c;import { square as squ } from 'lib/calc';
Спецификация 14.2
var x = function() {}
let x = () => {}
this.x = "yes";
var self = this;
var y = function(){
"use strict"
console.log(self.x)
};
this.x = "yes";
let y = () => {
"use strict"
console.log(this.x)
};
y(); //'yes'
Явный returnlet add = (a,b) => a + b;add(2, 3); //5
let add = (a,b) => { return a + b };add(2, 3); //5
Спецификация 14.2
var sym1 = Symbol();var sym2 = Symbol("foo");var sym3 = Symbol("foo");Symbol("foo") === Symbol("foo"); // false O_o
var MyClass = (function() {var key = Symbol("key"); // module scoped symbolfunction MyClass(prvtData) {this[key] = prvtData;}return MyClass;})();var c = new MyClass("hello")c["key"] === undefined
Симовол уникален, но не приватен, т.к он может быть получен в результате рефлексии через метод
Object.getOwnPropertySymbols
Спецификация 23.1 - 23.4
Упрощают работу со специфичными типами коллекций. Map позволяет определять коллекции наборов в формате ключ/значение. В качестве ключа и значения могут выступать любые выражения JavaScript. По аналогии Set позволяет задать множество любых выражений JavaScript
let data = new Map();data.set('key', 100);data.set(undefined, 'some text');data.has('tag'); //falsedata.has(undefined); //truedata.delete(undefined);data.has(undefined); //false
let data = new Set([1, 3, 5, 3]);data.add(3);data.size; //3data.add(7);data.has(3); //truedata.has(9); //falsedata.delete(3);data.has(3); //false
То же самое, но безопасно, т.е не заботимся об утечках памяти!
Объект удаляется, если на него больше не осталось ссылок, кроме ссылки из текущей коллекции, что позволяет не беспокоиться об утечках памяти.
for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}
myArray.forEach(function (value) {
console.log(value);
});
for (var index in myArray) {
console.log(myArray[index]);
}
for (var index of myArray) {
console.log(myArray[index]);
}
Спецификация 25.2
Генератор - позволяет организовать эффективное выполнение функций в асинхронном режиме.
Итератор:
Генератор:
for (var value of range(10, 1000)) {
console.log(value);
}
Спецификация 25.4
Предназначен для получения значений в асинхронном режиме. Позволяет определить значение, которое пока неизвестно, но будут определено через какое-то время
Это боль...};})});});});});
new Promise(resolve, reject) {if (testSomething) {resolve(resValue);} else {reject(errValue);});
Так лучше!requestFromServer().then(function(res) {return res2;}).then(function(res2) {return res3;})....then(function(res3) {return res4;})
Спецификация 14.5
class Animal {constructor() {this.speed = 0;}toString() {return this.speed === 0 ? ' sleep' : ' play'}}
class Cat extends Animal {constructor() {super();this.speed = 10;}}
let dog = new Animal();let cat = new Cat();console.log(dog.toString()); // sleepconsole.log(cat.toString()); // playconsole.log(cat instanceof Animal); // trueconsole.log(cat instanceof Cat); // true
class Util {static inc(x) {return x + 1},static dec(x) {return x - 1}}console.log(Util.inc(5)); // 6
class O {constructor() {this.mx = 'initial';}get x() { return this.mx; }set x(val) { this.mx = val; }}
var a = new ClassA(2); // ReferenceErrorclass ClassA {constructor(n) {this.x = n;}}
Использует SameValue(x, y) алгоритмObject.is(0, -0); // falseObject.is(NaN, NaN) // true!0 === -0; // trueNaN === NaN; // false