ECMAScript (часто сокращенно ES) — стандартизированная спецификация языка программирования для JavaScript. Он разработан и поддерживается комитетом по спецификации языка ECMAScript и является стандартом, на котором основан JavaScript. Спецификация устанавливает правила и рекомендации относительно того, как должен вести себя язык JavaScript, включая синтаксис, типы данных и встроенные объекты. Версии ECMAScript выпускаются периодически, а новые версии привносят в язык новые функции и возможности.

ECMAScript широко используется для веб-разработки, написания сценариев на стороне сервера и на стороне клиента, а также для создания мобильных и настольных приложений. JavaScript, JScript и ActionScript — некоторые популярные реализации ECMAScript. JavaScript — наиболее широко используемая реализация, поддерживаемая всеми основными веб-браузерами. Итак, в этой статье я расскажу о самых известных функциях JavaScript в ECMAScript 2022.

1. Ожидание верхнего уровня

Ожидание верхнего уровня — это функция, которая была предложена для включения в ECMAScript 2022. Тем не менее, позже она была удалена из предложения из-за опасений по поводу ее влияния на семантику языка и сложности ее реализации в существующих механизмах JavaScript.

Эта функция позволила бы разработчикам использовать ключевое слово await вне функции async, что позволило бы им использовать асинхронный код на верхнем уровне своих скриптов, например, в глобальной области видимости или при экспорте модулей.

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

В настоящее время await верхнего уровня не является частью ECMAScript, и неизвестно, будет ли он добавлен в будущих версиях.

2. Метод .at()

Метод .at() не является частью какого-либо официального стандарта ECMAScript, но может быть доступен в некоторых библиотеках или фреймворках JavaScript.

Метод .at() можно использовать для доступа к элементу массива по его индексу, и он возвращает элемент по указанному индексу. Например, если у вас есть массив с именем myArray и вы хотите получить доступ к элементу с индексом 2, вы можете использовать следующий код:

myArray.at(2);

Он похож на встроенный метод Array.prototype.indexOf().

Стоит отметить, что JavaScript изначально предоставляет скобки для доступа к элементам массива, например:

myArray[2];

Также важно отметить, что .at() метод может вести себя по-разному в зависимости от вашей библиотеки или фреймворка.

Пожалуйста, дайте мне знать, если у вас есть дополнительная информация о контексте, в котором вы видели метод .at(), чтобы я мог предоставить более подробную информацию.

3. Объявления полей класса

Объявления полей класса — это функция, предлагаемая для включения в ECMAScript 2022. Она позволяет разработчикам определять свойства класса непосредственно в определении класса, а не в конструкторе. Он обеспечивает более краткий синтаксис для определения свойств класса и более интуитивно понятный способ установки начальных значений для свойств класса.

Вот пример того, как можно использовать объявления полей класса:

В этом примере поля класса myField и myField2 определяются непосредственно в определении класса и устанавливаются в свои начальные значения. Это эквивалентно определению свойств в конструкторе с использованием this.myField = 'initial value' и this.myField2 = 0.

Объявления полей класса также поддерживают модификаторы доступа public и private, что позволяет вам контролировать доступность полей.

class MyClass {
    #privateField;
    publicField;
    constructor(){
        this.#privateField = "I'm a private field";
        this.publicField = "I'm a public field";
    }
}

В этом примере #privateField — это закрытое поле, к которому можно получить доступ только внутри класса, а publicField — из любого места.

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

4. Индексы совпадения регулярных выражений

Статический блок класса — это функция, предлагаемая для включения в ECMAScript 2022. Она позволяет разработчикам определять блок кода, который будет выполняться при первом доступе к классу.

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

Вот пример того, как можно использовать статический блок класса:

class MyClass {
 static {
 // code to be executed when the class is first accessed
 MyClass.staticProp = ‘initial value’;
 }
static staticProp;

constructor() {
 // …
 }

myMethod() {
 // …
 }
}

В этом примере статический блок класса определяется непосредственно после определения класса и устанавливает для статического свойства MyClass.staticProp начальное значение 'initial value'.

Стоит отметить, что эта функция в настоящее время находится на стадии предложения, и неясно, будет ли она включена в будущие версии ECMAScript.

5. Метод Object.hasOwn()

Правильный метод проверки того, имеет ли объект свойство, определенное непосредственно в нем, а не в его цепочке прототипов, — Object.prototype.hasOwnProperty().

Например, если у вас есть объект с именем myObj и вы хотите проверить, есть ли у него свойство с именем myProp, вы можете использовать:

myObj.hasOwnProperty('myProp')

Метод hasOwnProperty() возвращает логическое значение, указывающее, имеет ли объект указанное свойство как собственное (не унаследованное) свойство.

Также стоит упомянуть, что вы можете использовать оператор in, чтобы проверить, существует ли свойство в объекте. Однако он проверяет как собственные, так и унаследованные свойства, например:

'myProp' in myObj

Эта строка кода вернет значение true независимо от того, существует ли свойство непосредственно в объекте или в его цепочке прототипов.

6. Ошибка: .причина

В JavaScript объект Error является встроенным объектом, представляющим ошибку. У него есть несколько свойств, таких как name, message и stack, которые предоставляют информацию о возникшей ошибке.

Свойство .cause не является частью официального стандарта ECMAScript, но может быть доступно в некоторых библиотеках или фреймворках JavaScript. Его можно использовать для хранения дополнительной информации об ошибке, например основной причины ошибки или возникшего исключения.

Например, если у вас есть библиотека, обертывающая сторонний API, и вы хотите распространять ошибки, возникающие в API, вы можете создать свой собственный класс ошибок, наследуемый от встроенного объекта Error, и добавить свойство .cause к сохранить исходную ошибку.

class ApiError extends Error {
  constructor(cause, message) {
    super(message);
    this.cause = cause;
    this.name = 'ApiError';
  }
}

try {
  // Call the third-party API
  throw new Error('something went wrong');
} catch (error) {
  throw new ApiError(error, 'An error occurred while calling the API');
}

В этом примере класс ApiError наследуется от встроенного объекта Error и добавляет свойство cause для хранения исходной ошибки.

Стоит отметить, что эта функция не является частью официальной спецификации ECMAScript и зависит от вашей библиотеки или фреймворка.

7. RegExp: индексы соответствия (флаг ‘d’)

Флаг «d» — это предлагаемая функция для ECMAScript, которая позволит разработчикам использовать регулярные выражения для сопоставления текста, а также захватывать индексы сопоставленного текста. Это может быть полезно для таких задач, как выделение совпадающего текста в текстовом редакторе или определение местоположения совпадений в большой строке.

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

Вот пример того, как можно использовать эту функцию:

let str = "The quick brown fox jumps over the lazy dog.";
let regex = /[a-z]+/g;
let match = regex.exec(str);
console.log(match.index); // 4
console.log(match[0]); // "quick"

Этот код соответствует любой последовательности строчных букв в строке «Быстрая коричневая лиса перепрыгивает через ленивую собаку». и возвращает первое совпадение и его индекс.

С флагом «d»:

let str = "The quick brown fox jumps over the lazy dog.";
let regex = /[a-z]+/gd;
let match = regex.exec(str);
console.log(match.index); // {start:4, end:9}
console.log(match[0]); // "quick"

Этот код соответствует любой последовательности строчных букв в строке «Быстрая коричневая лиса перепрыгивает через ленивую собаку». и возвращает первое совпадение, его индекс и конечный индекс.

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

Заключение

В заключение отметим, что ECMAScript 2022 — это последняя версия стандарта ECMAScript, которая предоставляет набор правил и рекомендаций для таких языков программирования, как JavaScript. Он включает в себя новые функции, такие как поля частного класса, необязательную цепочку и объединение с нулевым значением, а также обновления существующих функций. Он все еще находится в разработке, и ожидается, что он будет завершен и опубликован в 2022 году. Эти новые функции позволяют разработчикам писать более эффективный, выразительный и безопасный код. ECMAScript 2022 — это шаг вперед в эволюции языка JavaScript, который постоянно обновляется, чтобы соответствовать новым требованиям разработчиков и делать его более мощным и универсальным.

Спасибо за чтение !!!