Рубрики
Без рубрики

Руководство по ES2018

ECMAScript – это стандарт, на котором основан JavaScript, и его часто сокращают до ES. Узнайте все о ECMAScript и функциях, добавленных в ES 2018, он же ES9

  • Свойства покоя/Распространения
  • Асинхронная итерация
  • Обещание.прототип. наконец()
  • Улучшения регулярных выражений
    • Регулярное выражение поисковых утверждений: сопоставьте строку в зависимости от того, что ей предшествует
    • Свойство Unicode экранирует \p{…} и \P{…}
    • Именованные группы захвата
    • Флаг s для регулярных выражений

ES2018 – это последняя версия стандарта ECMAScript.

Что нового в нем появилось?

Свойства покоя/Распространения

ES6 ввел понятие элемента rest при работе с деструктурированием массива :

const numbers = [1, 2, 3, 4, 5]
[first, second, ...others] = numbers

и элементы распространения :

const numbers = [1, 2, 3, 4, 5]
const sum = (a, b, c, d, e) => a + b + c + d + e
const sumOfNumbers = sum(...numbers)

ES2018 вводит то же самое, но для объектов.

Остальные свойства :

const { first, second, ...others } = { first: 1, second: 2, third: 3, fourth: 4, fifth: 5 }

first // 1
second // 2
others // { third: 3, fourth: 4, fifth: 5 }

Свойства распространения позволяют создавать новый объект путем объединения свойств объекта, переданного после оператора распространения :

const items = { first, second, ...others }
items //{ first: 1, second: 2, third: 3, fourth: 4, fifth: 5 }

Асинхронная итерация

Новая конструкция for-await-of позволяет использовать асинхронный повторяющийся объект в качестве итерации цикла:

for await (const line of readLines(filePath)) {
  console.log(line)
}

Так как это использует ожидание , вы можете использовать его только внутри асинхронных функций, как обычный ожидающий (см. асинхронный/ожидание )

Обещание.прототип. наконец()

Когда обещание выполнено, оно успешно вызывает методы then() один за другим.

Если во время этого что-то не удается, методы then() переходят и выполняется метод catch() .

наконец() позволяет запускать некоторый код независимо от успешного или не успешного выполнения обещания:

fetch('file.json')
  .then(data => data.json())
  .catch(error => console.error(error))
  .finally(() => console.log('finished'))

Улучшения регулярных выражений

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

Это взгляд в будущее: вы используете ? = для сопоставления строки, за которой следует определенная подстрока:

/Roger(?=Waters)/

/Roger(?= Waters)/.test('Roger is my dog') //false
/Roger(?= Waters)/.test('Roger is my dog and Roger Waters is a famous musician') //true

?! выполняет обратную операцию, сопоставляя, если за строкой не следует определенная подстрока:

/Roger(?!Waters)/

/Roger(?! Waters)/.test('Roger is my dog') //true
/Roger(?! Waters)/.test('Roger Waters is a famous musician') //false

Смотрите вперед, используя ?= символ. Они уже были доступны.

Lookbehinds , новая функция, использует ?<= .

/(?<=Roger) Waters/

/(?<=Roger) Waters/.test('Pink Waters is my dog') //false
/(?<=Roger) Waters/.test('Roger is my dog and Roger Waters is a famous musician') //true

Взгляд назад отрицается с помощью ? :

/(?

Свойство Unicode экранирует \p{…} и \P{…}

В шаблоне регулярного выражения вы можете использовать \d для сопоставления любой цифры, \s для сопоставления любого символа, который не является пробелом, \w для сопоставления любого буквенно-цифрового символа и так далее.

Эта новая функция расширяет эту концепцию на все символы Юникода, вводящие \p{} и его отрицание \P{} .

Любой символ unicode имеет набор свойств. Например, Скрипт определяет языковое семейство, ASCII является логическим значением, которое верно для символов ASCII, и так далее. Вы можете поместить это свойство в круглые скобки графика, и регулярное выражение проверит, верно ли это:

/^\p{ASCII}+$/u.test('abc')   //✅
/^\p{ASCII}+$/u.test('ABC@')  //✅
/^\p{ASCII}+$/u.test('ABC🙃') //❌

ASCII_Hex_Digit – это еще одно логическое свойство, которое проверяет, содержит ли строка только допустимые шестнадцатеричные цифры:

/^\p{ASCII_Hex_Digit}+$/u.test('0123456789ABCDEF') //✅
/^\p{ASCII_Hex_Digit}+$/u.test('h')                //❌

Существует множество других логических свойств, которые вы просто проверяете, добавляя их имя в скобки графика, включая Прописные , Строчные , Белое пространство , Алфавитный , Смайлики и многое другое:

/^\p{Lowercase}$/u.test('h') //✅
/^\p{Uppercase}$/u.test('H') //✅

/^\p{Emoji}+$/u.test('H')   //❌
/^\p{Emoji}+$/u.test('🙃🙃') //✅

В дополнение к этим двоичным свойствам вы можете проверить любое из свойств символов юникода на соответствие определенному значению. В этом примере я проверяю, написана ли строка греческим или латинским алфавитом:

/^\p{Script=Greek}+$/u.test('ελληνικά') //✅
/^\p{Script=Latin}+$/u.test('hey') //✅

Узнайте больше обо всех свойствах, которые вы можете использовать непосредственно в предложении .

Именованные группы захвата

В 2018 году группе захвата может быть присвоено имя, а не просто место в массиве результатов:

const re = /(?\d{4})-(?\d{2})-(?\d{2})/
const result = re.exec('2015-01-02')

// result.groups.year === '2015';
// result.groups.month === '01';
// result.groups.day === '02';

Флаг s для регулярных выражений

Флаг s , сокращенный от однострочный , вызывает . чтобы также соответствовать символам новой строки. Без этого, точка соответствует обычным символам, но не новой строке:

/hi.welcome/.test('hi\nwelcome') // false
/hi.welcome/s.test('hi\nwelcome') // true

Оригинал: “https://flaviocopes.com/es2018/”