Этот стандарт Ecma определяет язык ECMAScript 2022. Это одиннадцатое издание Спецификации языка ECMAScript. Со времени публикации первого издания в 1997 году ECMAScript стал одним из самых широко используемых в мире языков программирования общего назначения. Он наиболее известен как язык, встроенный в веб-браузеры, но также широко применяется для серверных и встроенных приложений.
ECMAScript основан на нескольких исходных технологиях, наиболее известными из которых являются JavaScript (Netscape) и JScript (Microsoft). Язык был изобретен Бренданом Эйхом (Brendan Eich) в Netscape и впервые появился в браузере Navigator 2.0 этой компании. Он появился во всех последующих браузерах от Netscape и во всех браузерах от Microsoft, начиная с Internet Explorer 3.0.
Разработка спецификации языка ECMAScript началась в ноябре 1996 года. Первое издание этого стандарта Ecma было принято Генеральной Ассамблеей Ecma (Ecma General Assembly) в июне 1997 года.
Этот стандарт Ecma был представлен «ISO/IEC JTC 1» для принятия в соответствии с ускоренной процедурой и утвержден в качестве международного стандарта «ISO/IEC 16262» в апреле 1998 года. Генеральная ассамблея Ecma в июне 1998 года утвердила второе издание ECMA-262 для сохранения его в полном соответствии с «ISO/IEC 16262«. Изменения между первым и вторым изданием носят редакционный характер.
Третье издание Стандарта представило мощные регулярные выражения, улучшенную обработку строк, новые операторы управления, обработку исключений «try/catch«, более точное определение ошибок, форматирование для числового вывода и незначительные изменения в ожидании будущего роста языка. Третье издание стандарта ECMAScript было принято Генеральной Ассамблеей Ecma в декабре 1999 года и опубликовано как «ISO/IEC 16262:2002» в июне 2002 года.
После публикации третьего издания ECMAScript получил широкое распространение вместе со Всемирной паутиной, где он стал языком программирования, который поддерживается практически всеми веб-браузерами. Была проделана значительная работа по разработке четвертого издания ECMAScript. Однако эта работа не была завершена и не была опубликована в качестве четвертого издания ECMAScript, а часть ее была включена в разработку шестого издания.
Пятое издание ECMAScript (опубликовано как 5-е издание ECMA-262) кодифицировало де-факто интерпретации языковой спецификации, которые стали распространенными среди реализаций браузера, и добавило поддержку новых функций, появившихся после публикации третьего издания. К таким функциям относятся свойства средства доступа, создание и проверка объектов с отражением, программный контроль атрибутов свойств, дополнительные функции манипулирования массивами, поддержка формата кодирования объектов JSON и строгий режим, обеспечивающий расширенную проверку ошибок и безопасность программы. Пятое издание было принято Генеральной Ассамблеей Ecma в декабре 2009 года.
Пятое издание было представлено «ISO/IEC JTC 1» для принятия в соответствии с ускоренной процедурой и утверждено в качестве международного стандарта «ISO/IEC 16262:2011«. Издание 5.1 стандарта ECMAScript включает незначительные исправления и является тем же текстом, что и «ISO/IEC 16262:2011«. Выпуск 5.1 был принят Генеральной Ассамблеей Ecma в июне 2011 года.
Целенаправленная разработка шестого издания началась в 2009 году, поскольку пятое издание готовилось к публикации. Однако этому предшествовали значительные экспериментальные и языковые разработки, направленные на публикацию третьего издания в 1999 году. В самом реальном смысле завершение шестого издания является кульминацией пятнадцатилетних усилий. Цели этого выпуска включали обеспечение лучшей поддержки больших приложений, создание библиотек и использование ECMAScript в качестве цели компиляции для других языков. Некоторые из его основных улучшений включали модули, объявления классов, определение лексических блоков, итераторы и генераторы, обещания асинхронного программирования, шаблоны деструктуризации и правильное хвостовые вызовы. Библиотека встроенных модулей ECMAScript была расширена для поддержки дополнительных абстракций данных, включая карты, наборы и массивы двоичных числовых значений, а также дополнительную поддержку дополнительных символов Юникода (Unicode) в строках и регулярных выражениях. Встроенные модули также были расширены с помощью подклассов. Шестое издание обеспечивает основу для регулярных, дополнительных языковых и библиотечных улучшений. Шестое издание было принято Генеральной Ассамблеей в июне 2015 года.
ECMAScript 2016 был первым изданием ECMAScript, выпущенным в соответствии с новым годовым выпуском Ecma TC39 и открытым процессом разработки. Исходный документ в виде простого текста был создан на основе исходного документа ECMAScript 2015, чтобы служить основой для дальнейшей разработки полностью на GitHub. За год разработки этого стандарта были поданы сотни запросов и проблем, представляющих тысячи исправлений ошибок, редакционных исправлений и других улучшений. Кроме того, были разработаны многочисленные программные инструменты, в том числе «Ecmarkup«, «Ecmarkdown» и «Grammarkdown«. ES2016 также включает поддержку нового оператора возведения в степень и добавляет новый метод в Array.prototype
, называемый includes
.
В ECMAScript 2017 были представлены Async Functions (асинхронные функции), Shared Memory (общая память) и Atomics, а также небольшие улучшения языка и библиотек, исправления ошибок и редакторские обновления. Асинхронные функции (Async Functions) улучшают процесс асинхронного программирования, предоставляя синтаксис для функций, возвращающих обещание. Shared Memory и Atomics представляют новую модель памяти (memory model), которая позволяет много-агентным (multi-agent) программам взаимодействовать с использованием атомарных операций, которые обеспечивают четко определенный порядок выполнения даже на параллельных процессорах. Также включены новые статические методы для Object: Object.values
, Object.entries
и Object.getOwnPropertyDescriptors
.
В ECMAScript 2018 введена поддержка асинхронной итерации через протокол AsyncIterator и асинхронные генераторы. Он также включал четыре новые функции регулярных выражений: флаг dotAll, именованные группы захвата, экранирование свойств Unicode и опосредованные утверждения. Наконец, в него включены свойства покоя и распространения объекта.
ECMAScript 2019 представил несколько новых встроенных функций: flat
и flatMap
для Array.prototype
для выравнивания массивов, Object.fromEntries
для прямого преобразования возвращаемого значения Object.entries
в новый Object, а также более аккуратные trimStart
и trimEnd
для String.prototype
хорошо-названные альтернативы широко реализованным, но нестандартным встроенным модулям String.prototype.trimLeft
и trimRight
. Кроме того, в него включено несколько небольших обновлений синтаксиса и семантики. Обновленный синтаксис включает необязательные параметры привязки перехвата и позволяет U+2028 (LINE SEPARATOR) и U+2029 (PARAGRAPH SEPARATOR) в строковых литералах выровняться с JSON. Другие обновления включали в себя требование, чтобы Array.prototype.sort
был устойчивой сортировкой, требование, чтобы JSON.stringify возвращал правильно сформированный UTF-8 независимо от ввода, и уточнение Function.prototype.toString
, требуя, чтобы оно либо возвращало соответствующий исходный текст, либо стандартный заполнитель.
ECMAScript 2020, 11-е издание, вводит метод matchAll
для Strings, чтобы создать итератор для всех объектов соответствия, сгенерированных глобальным регулярным выражением; import()
, синтаксис для асинхронного импорта модулей с динамическим спецификатором; BigInt
, новый числовой примитив для работы с целыми числами произвольной точности; Promise.allSettled
, новый комбинатор Promise, который не замыкается; globalThis
, универсальный способ доступа к глобальному значению this
; выделенный синтаксис экспорта export * as ns from 'module'
для использования в модулях; повышенная стандартизация порядка for-in
перечисления для входа; import.meta
, заполненный хостом объект, доступный в Модулях, который может содержать контекстную информацию о Модуле; а также добавление двух новых синтаксических функций для улучшения работы с «null-евыми» значениями (null
или undefined
): объединение «null-евых» значений, оператор выбора значения; и необязательное связывание, оператор доступа к свойству и вызова функции, который замыкает, если значение для доступа/вызова является «null-евым».
12-е издание ECMAScript 2021 представляет метод replaceAll
для Строк; Promise.any
, комбинатор Promise, который замыкает накоротко при достижении входного значения; AggregateError
, новый тип Ошибки для одновременного представления нескольких ошибок; операторы логического присваивания (??=
, &&=
, ||=
); WeakRef
для ссылки на целевой объект без сохранения его от сборки мусора и FinalizationRegistry
для управления регистрацией и отменой регистрации операций очистки, выполняемых, когда целевые объекты собираются сборщиком мусора; разделители для числовых литералов (1_000
); и Array.prototype.sort
был сделан более точным, уменьшив количество случаев, которые приводят к определенному реализацией порядку сортировки.
Десятки людей, представляющих многие организации, внесли значительный вклад в Ecma TC39 в разработку этого и предыдущих выпусков. Кроме того, появилось активное сообщество, поддерживающее усилия ECMAScript TC39. Это сообщество рассмотрело многочисленные проекты, подало тысячи отчетов об ошибках, провело эксперименты по внедрению, предоставило наборы тестов и ознакомило международное сообщество разработчиков с ECMAScript. К сожалению, невозможно идентифицировать и признать каждого человека и организацию, которые внесли свой вклад в эти усилия.
Авторы
Allen Wirfs-Brock
ECMA-262, Project Editor, 6th Edition
Brian Terlson
ECMA-262, Project Editor, 7th through 10th Editions
Jordan Harband
ECMA-262, Project Editor, 10th through 12th Editions
Ссылка на источник
Стандарт ECMAScript — Раздел «Introduction» — https://tc39.es/ecma262/#sec-intro