Ето няколко бележки относно https://github.com/getify/You-Dont-Know-JS/blob/master/es6%20%26%20beyond/ch2.md. Вероятно ще получите много повече информация, като прочетете източника. Това е най-вече лично резюме.

Позволявам

letпозволява да се опишат променливи, базирани на обхват

Функция с обхват

Декларацията на функция е ограничена по обхват до блока, в който е дефинирана

Оператор за разпространение

Операторът spread разширява масив като отделни стойности:

f(…[1,2,3]); expand to f(1,2,3)
[1,…[2,3]] expand to [1,2,3]

Аргументи по подразбиране

function f(x=1,y=2) { return x+y; }
f(undefined,3); returns 4

Деструктуриране

С масив:

var [x,y,z] = [1,2,3,4]
var [y,x] = [x,y]
var [,y,z] = [1,2,3,4]
var [x,…y] = [1,2,3,4]

С обекти:

var {x,y,z} = {x:1,y:2,z:3}
var {x:a,y:b,z:c} = {x:1,y:2,z:3}
var {x:o.a,y:o.b,z:o.c} = {x:1,y:2,z:3}
var {x:a[0],y:a[1],z:a[2]} = {x:1,y:2,z:3}
var {x=10,y=11,z=12} = {x:1}

Вложени:

var [a,{x,y}] = [1,{x:1,y:2}]

Деструктуриране като аргументи на функция

function f({x,y}) {}
f({x:1,y:2})

Кратки методи

var o = {
 x() {},
 y() {} 
}

Внимавайте, че това не може да работи (не поради очевиден проблем с рекурсията), а просто защото x не е дефинирано в обхвата на функцията:

var o = {
x() { x(); }
}

Гетер и сетер

var o = {
get id() { return __id; },
set id(id) { __id = id; }
}
console.log(o.id); 

Име на изчислените свойства

var o = {
[prefix+”_var”] : 1,
[prefix+”_func”() {}
}

Object.setPrototypeOf

Object.setPrototypeOf(obj,proto)

Шаблонен литерал

`my name is ${name}`
`my name is ${f(name)}`

Функции на стрелките

Функциите със стрелки са чудесни за кратки вградени функции, но с нарастването на функцията стават все по-малко четими.

var f1 = () => 1
var f2 = x => x
var f2 = (x,y) => { return x+y; }

Това се запазва като сочещо към оригиналния обект, както би направило bind(this), така че те са доста практични като обратни извиквания.

var o = {
 listen: function() { 
 btn.addEventListener(() => { this.hello() })
 },
 hello:function() {
 console.log(“hello”);
 }
}

Но бъдете внимателни, ако използвате верижно обозначение на функцията стрелка, тъй като това ще бъде горният оригинален обект.

За... цикъл

for(var v of [“a”,”b”,”c”]) { console.log(v); } // will print “a”,”b”,”c”

for…of също работи с итератори, низове, деструктурирани обекти

Regex

Началото на съответствието на регулярния израз може да бъде позиционирано ръчно върху низ с lastIndex, така че не е нужно да разделяте низ на части, за да тествате регулярен израз спрямо дълъг текст. Работи със залепващия флагy

Флаговете могат да бъдат запитвани на регулярен израз

var r = /test/gi
console.log(r.flags); // will print “gi”.

Редът на флаговете винаги е “gimuy”

Octal е ясен в строг режим

0o52 = 42

Уникод

Unicode вече работи в regex, в низове, в променливи. String.codePointAt е еквивалентът на String.charCodeAt за уникод символи. Позицията в низ ще бъде обработена правилно.

Символи

Символите са предназначени да се използват за константи. Те са като синтаксиса :label на Ruby, ако знаете това.

var CONSTANT = Symbol(“APP.CONSTANT”)

Текстът вътре в символа е само за описание на символа. Възможно е да извикате константа от друго място в кода с:

var CONSTANT = Symbol.for(“APP.CONSTANT”)