ES8: Що нового в мові JavaScript у 2017 році

ES8 працює в прямому ефірі! Випущений раніше цього літа, ES8 (також званий ES2017) пропонує нові способи кодування за допомогою JavaScript. Давайте дослідимо їх.

Якщо у вас остання версія Chrome, відкрийте консоль і давайте кодувати разом.

Object.values ​​()

Отримуйте доступ до всіх значень нашого об’єкта без ускладнень. Ось приклад:

const countries = { BR: 'Brazil', DE: 'Germany', RO: 'Romania', US: 'United States of America'};
Object.values(countries); // ['Brazil', 'Germany', 'Romania', 'United States of America']

Object.entries

Перетворіть атрибут об’єкта в масив атрибутів:

const countries = { BR: 'Brazil', DE: 'Germany', RO: 'Romania', US: 'United States of America'};
Object.entries(countries); 
// [['BR', 'Brazil'], ['DE', 'Germany'], ['RO', 'Romania'], ['US','United States of America']]

Заповнення рядка (padStart і padEnd)

Це повертає переданий рядок, додаючи панель і початок або кінець. Визначення функції:

'string'.padStart(targetLength, padString)
'string'.padEnd(targetLength, padString)

Ми можемо зробити:

'0.10'.padStart(10); // it return a string of length 10, padding empty spaces in the beginning
'hi'.padStart(1); // 'hi''hi'.padStart(5); // ' hi''hi'.padStart(5, 'abcd'); // 'abchi''hi'.padStart(10, 'abcd'); // 'abcdabcdhi'
'loading'.padEnd(10, '.'); // 'loading...'
// useful example making things easier to read'0.10'.padStart(12); // ' 0.10''23.10'.padStart(12); // ' 23.10''12,330.10'.padStart(12); // ' 12,330.10'

Object.getOwnPropertyDescriptors ()

Він повертає всі власні (не успадковані) дескриптори властивостей об’єкта. Атрибути повернення об'єкта можуть бути: value, writable, get, set, configurableі enumerable.

const obj = { name: 'Pablo', get foo() { return 42; }};
Object.getOwnPropertyDescriptors(obj);//// {// "name": {// "value": "Pablo",// "writable":true,// "enumerable":true,// "configurable":true// },// "foo":{// "enumerable":true,// "configurable":true,// "get": function foo()// "set": undefined// }// }

Одним з практичних прикладів є: JavaScript має метод копіювання властивостей Object.assign(). Він копіює властивість, ключем якої є key. Подобається це:

const value = source[key]; // gettarget[key] = value; // set

А в деяких випадках він виходить з ладу, оскільки неправильно копіює властивості з атрибутами, які не є типовими, такими як геттери, сетери та властивості, що не можна записати.

Наприклад:

const objTarget = {};const objSource = { set greet(name) { console.log('hey, ' + name); }};Object.assign(objTarget, objSource);
objTarget.greet = 'love'; // trying to set fails, sets greet = 'love'

Вирішення:

const objTarget = {};const objSource = { set greet(name) { console.log('hey, ' + name); }};Object.defineProperties(objTarget, Object.getOwnPropertyDescriptors(objSource));
objTarget.greet = 'love'; // prints 'hey, love'

Коми в кінці у списках параметрів функції та викликах

Це зміна синтаксису. Це дозволяє нам в кінці написати дійсну декларацію функції з комою.

getDescription(name, age,) { ... }

Функції асинхронізації (асинхронізація та очікування)

Це значно полегшує роботу з асинхронними функціями:

function loadExternalContent() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('hello'); }, 3000); });}
async function getContent() { const text = await loadExternalContent(); console.log(text);}
console.log('it will call function');getContent();console.log('it called function');
// it prints:
'it will call function' // synchronous'it called function' // synchronous'hello' // asynchronous (after 3 seconds)

Спільна пам’ять та атоміка

Відповідно до специфікації:

"Спільна пам'ять виставляється у вигляді нового типу SharedArrayBuffer; новий глобальний об'єкт Atomics забезпечує атомні операції над місцями спільної пам'яті, включаючи операції, які можна використовувати для створення блокуючих примітивів синхронізації."

Це означає:

Спільна пам’ять: ми можемо дозволити декільком потокам читати та записувати одні й ті самі дані за допомогою нового SharedArrayBufferконструктора.

Атомічність: ми можемо використовувати Atomicsоб’єкт, щоб переконатися, що ніщо, що пишеться чи читається, не буде перервано в середині процесу. Отже, операції закінчуються до початку наступної.

Якщо вам сподобалась ця стаття, обов’язково сподобається, вона дасть мені багато плескітів - це означає для письменника світ? І йдіть за мною, якщо хочете прочитати більше статей про культуру, технології та стартапи.

Flávio H. de Freitas is an Entrepreneur, Engineer, Tech lover, Dreamer and Traveler. Has worked as CTO in Brazil, Silicon Valley and Europe.