Ето няколко бележки относно 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”)