Руководство ES2019

ECMAScript - это стандарт, на котором основан JavaScript, часто сокращенно ES. Узнайте все о ECMAScript и функциях, добавленных в ES2019

ESNext - это имя, которое всегда указывает следующую версию JavaScript.

Текущая версия ECMAScriptES2018. It was released in June 2018.

Исторически выпуски JavaScript стандартизировались летом, поэтому мы можем ожидатьECMAScript 2019 to be released in summer 2019.

Итак, на момент написания ES2018 был выпущен, иESNext - ES2019

Предложения по стандарту ECMAScript организуются поэтапно. Этапы 1-3 представляют собой инкубатор новых функций, а функции, достигающие этапа 4, завершаются как часть нового стандарта.

На момент написания у нас есть ряд функций наStage 4. Я представлю их в этом разделе. В последних версиях основных браузеров уже должно быть реализовано большинство из них.

  • Array.prototype.{flat,flatMap}
  • Необязательная привязка захвата
  • Object.fromEntries()
  • String.prototype.{trimStart,trimEnd}
  • Symbol.prototype.description
  • Улучшения JSON
  • Хорошо сформированныйJSON.stringify()
  • Function.prototype.toString()

Некоторые из этих изменений в основном предназначены для внутреннего использования, но также полезно знать, что происходит.

На этапе 3 есть и другие функции, которые могут быть переведены на этап 4 в ближайшие несколько месяцев, и вы можете проверить их в этом репозитории GitHub:https://github.com/tc39/proposals.

Array.prototype.{flat,flatMap}

flat()- это новый метод экземпляра массива, который может создать одномерный массив из многомерного массива.

Пример:

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]

По умолчанию он выравнивается только до одного уровня, но вы можете добавить параметр, чтобы установить количество уровней, на которые вы хотите сгладить массив. Установите его наInfinityиметь неограниченное количество уровней:

['Dog', ['Sheep', ['Wolf']]].flat()
//[ 'Dog', 'Sheep', [ 'Wolf' ] ]

['Dog', ['Sheep', ['Wolf']]].flat(2)
//[ 'Dog', 'Sheep', 'Wolf' ]

['Dog', ['Sheep', ['Wolf']]].flat(Infinity)
//[ 'Dog', 'Sheep', 'Wolf' ]

Если вы знакомы с JavaScriptmap()метода массива, вы знаете, что с его помощью вы можете выполнить функцию для каждого элемента массива.

flatMap()это новый метод экземпляра массива, который объединяетflat()сmap(). Это полезно при вызове функции, которая возвращает массив в обратном вызове map (), но вы хотите, чтобы полученный массив был плоским:

['My dog', 'is awesome'].map(words => words.split(' '))
//[ [ 'My', 'dog' ], [ 'is', 'awesome' ] ]

['My dog', 'is awesome'].flatMap(words => words.split(' '))
//[ 'My', 'dog', 'is', 'awesome' ]

Необязательная привязка захвата

Иногда нам не нужно связывать параметр с блоком catch в try / catch.

Раньше нам приходилось делать:

try {
  //...
} catch (e) {
  //handle error
}

Даже если бы нам никогда не приходилось использоватьeпроанализировать ошибку. Теперь мы можем просто опустить его:

try {
  //...
} catch {
  //handle error
}

Object.fromEntries()

Объекты имеютentries()метод, посколькуES2017.

Он возвращает массив, содержащий все собственные свойства объекта, как массив[key, value]пары:

const person = { name: 'Fred', age: 87 }
Object.entries(person) // [['name', 'Fred'], ['age', 87]]

ES2019 представляет новыйObject.fromEntries()метод, который может создать новый объект из такого массива свойств:

const person = { name: 'Fred', age: 87 }
const entries = Object.entries(person)
const newPerson = Object.fromEntries(entries)

person !== newPerson //true

String.prototype.{trimStart,trimEnd}

Эта функция была частью v8 / Chrome уже почти год и будет стандартизирована в ES2019.

trimStart()

Вернуть новую строку с удаленным пробелом из начала исходной строки

'Testing'.trimStart() //'Testing'
' Testing'.trimStart() //'Testing'
' Testing '.trimStart() //'Testing '
'Testing '.trimStart() //'Testing'

trimEnd()

Вернуть новую строку с удаленным пробелом из конца исходной строки

'Testing'.trimEnd() //'Testing'
' Testing'.trimEnd() //' Testing'
' Testing '.trimEnd() //' Testing'
'Testing '.trimEnd() //'Testing'

Symbol.prototype.description

Теперь вы можете получить описаниеСимволполучая доступ к егоdescriptionсвойство вместо использованияtoString()метод:

const testSymbol = Symbol('Test')
testSymbol.description // 'Test'

Улучшения JSON

До этого изменения символы разделителя строк (\ u2028) и разделителя абзацев (\ u2029) не допускались в строках, анализируемых какJSON.

С помощьюJSON.parse(), эти символы привели кSyntaxErrorно теперь они правильно разбираются, как определено стандартом JSON.

Хорошо сформированныйJSON.stringify()

ИсправляетJSON.stringify()вывод, когда он обрабатывает суррогатные кодовые точки UTF-8 (от U + D800 до U + DFFF).

Перед этим изменением звонкаJSON.stringify()вернет искаженный символ Юникода («�»).

Теперь эти суррогатные кодовые точки можно безопасно представить в виде строк, используяJSON.stringify(), и преобразованы обратно в исходное представление с помощьюJSON.parse().

Function.prototype.toString()

У функций всегда был метод экземпляра, называемыйtoString()которые возвращают строку, содержащую код функции.

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

Если раньше у нас было:

function /* this is bar */ bar () {}

Поведение было таким:

bar.toString() //'function bar() {}

теперь новое поведение:

bar.toString(); // 'function /* this is bar */ bar () {}'

Скачать мою бесплатнуюРуководство для начинающих по JavaScript


Больше руководств по js: