Главное Авторские колонки Вакансии Образование
149 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Что нового в JavaScript ES2019

Кто же эти люди, которые каждый год меняет спецификацию языка, определяющую стандарты JavaScript? Раскрываем карты в новой статье и активно внедряем новшества в работу.
Мнение автора может не совпадать с мнением редакции

Существует стандартная процедура для последних версий Javascript и за этим стоит целый комитет. В статье я расскажу о том, кто принимает решения по любой новой спецификации, какова процедура для нее и что нового в ES2019.

Спецификация языка, управляющая JavaScript, называется ECMAScript. Существует группа под названием технический комитет 39 [TC39], которая рассматривает каждую спецификацию перед принятием.Каждое изменение проходит поэтапно:

  • Этап 0: Идеи
  • Этап 1: Предложения
  • Этап 2: Черновики
  • Этап 3: Кандидаты
  • Этап 4: Завершение/Утверждение
Функция, которая достигает 4-го этапа, скорее всего, будет частью спецификации языка.Рассмотрим, что добавлено в спецификацию в соответствии с ES2019.

Array.prototype.{flat,flatMap}

Array.prototype.flat() позволяет рекурсивно сгладить массивы до заданной глубины и вернуть новый массив.Синтаксис: 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 () отображает каждый элемент с помощью функции отображения и выравнивает результат в новый массив. Это идентично операции map, за которой следует flat глубиной 1. Синтаксис: Array.prototype.flatMap(callback)callback: функция, которая производит элемент нового массива.
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)итерация: Итерация как Array или Map объекты, реализующие итерируемый протокол.
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

Optional Catch Binding

До новой спецификации требовалось иметь привязку переменной исключения к оператору 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 представляет их с помощью escape-последовательностей 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.prototype.description

Свойство только для чтения, которое возвращает необязательное описание объекта Symbol:
Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined

Заключение

Есть еще много других интересных вещей таких, как статические и приватные методы и поля в классах, Legacy RegEx и т.д. Разработчику важно следить за появлением новых технологий, улучшением старых и использовать это в работе.Будет полезно почитать предыдущие версии: ES2015 ES2016 ES2017 ES2018

Перевод What’s new in JavaScript ES2019 от Digital Skynet

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем