
Багато з нас знають, що існує стандартна процедура для останніх випусків 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
з depth
1.
Синтаксис: 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: що вони роблять і коли їх використовувати