Що нового в JavaScript ES2019

Багато з нас знають, що існує стандартна процедура для останніх випусків Javascript і комітет, який стоїть за цим. У цьому дописі я розповім про те, хто робить остаточний дзвінок щодо будь-якої нової специфікації, яка процедура для неї та що нового в ES2019.

Специфікація мови, що керує JavaScript, називається ECMAScript. За цією командою є Технічний комітет 39 [TC39], який переглядає всі специфікації перед прийняттям .

Кожна зміна проходить процес із етапами зрілості.

  • Етап 0: Ідеї ​​/ Соломенник
  • Етап 1: Пропозиції
  • Етап 2: Чернетки
  • 3 етап: Кандидати
  • Етап 4: Завершено / Затверджено

Функція, яка досягає 4-го рівня , швидше за все, буде частиною специфікації мови.

Давайте зануримось у речі, які нещодавно додані до специфікації під ES2019.

Array.prototype. {Flat, flatMap}

Array.prototype.flat()запропонував згладити масиви рекурсивно до вказаного depthі повертає новий масив.

Синтаксис :Array.prototype.flat(depth)

глибина - значення за замовчуванням 1 , використовуйте Infinityдля згладжування всіх вкладених масивів.

const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6]

Array.prototype.flatMap()відображає кожен елемент за допомогою функції відображення та згладжує результат у новий масив. Це ідентично роботі карти , за яким слід flatз depth1.

Синтаксис: Array.prototype.flatMap(callback)

зворотний виклик:function створює елемент нового масиву.

const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6]

Object.fromEntries

Object.fromEntriesвиконує реверс Object.entries. Він перетворює список пар ключ-значення в об'єкт.

Синтаксис: Object.fromEntries(iterable)

ітеріруемий: Iterable , як Arrayабо Mapчи об'єкти реалізації Iterable протоколу

const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]];

String.prototype. {TrimStart, trimEnd}

trimStart()видаляє пробіли з початку рядка та trimEnd()видаляє пробіли з кінця рядка.

const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12

Необов’язкове прив’язування улову

До нової специфікації потрібно було мати змінну винятку, прив'язану до catchречення. ES2019 зробив це необов’язковим.

// Before try { ... } catch(error) { ... } // After try { ... } catch { ... }

Ця функція корисна, коли ви хочете повністю ігнорувати помилку. Найкраща практика - розглянути помилку.

Бувають випадки, коли ви знаєте можливу помилку, яка може спричинити операції. Ви можете ігнорувати обробку блоку catch.

JSON ⊂ ECMAScript

Тепер символи роздільника рядків (U + 2028) та розділювачів абзаців (U + 2029) дозволені в рядкових літералах. Раніше вони трактувались як лінійні термінатори, що призвело до SyntaxErrorвинятків.

// Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"');

Добре сформований JSON.stringify

Замість непарних сурогатних кодових точок, що призводять до одиничних кодових одиниць UTF-16 , ES10 представляє їх із захисними послідовностями JSON.

JSON.stringify('\uD800'); > '" "' JSON.stringify('\uD800'); > '"\\ud800"'

Function.prototype.toString

.toString() тепер повертає точні фрагменти тексту вихідного коду, включаючи пробіли та коментарі.

function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}'

Символ. Прототип. Опис

Властивість лише для читання, яка повертає необов’язковий опис Symbolоб’єкта:

Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined

Висновок

TC39 зберігає всі майбутні специфікації, які знаходяться на етапі> 1 процесу. Як розробнику, важливо стежити за тим, що відбувається навколо. У класі є багато інших захоплюючих речей, як статичні та приватні методи та поля, Legacy RegE x тощо. Дізнайтеся про все нове, що знаходиться на стадії пропозиції тут.

code = coffee + developer

Ось ще кілька цікавих тем:

  • Короткий огляд символів JavaScript
  • Як прийняти стратегію розгалуження git
  • Вступ до Git Merge та Git Rebase: що вони роблять і коли їх використовувати