stringtranslate.com

История версий ECMAScript

ECMAScript — стандарт JavaScript, разработанный Ecma International . С 2015 года основные версии публикуются каждый июнь.

ECMAScript 2024, 15-я и текущая версия, была выпущена в июне 2024 года.

Версии

В июне 2004 года Ecma International опубликовала стандарт ECMA-357, определяющий расширение ECMAScript, известное как ECMAScript для XML (E4X). Ecma также определила «Компактный профиль» для ECMAScript, известный как ES-CP или ECMA 327, который был разработан для устройств с ограниченными ресурсами, и который был отозван в 2015 году. [14]

4-е издание (заброшено)

Предложенное четвертое издание ECMA-262 ( ECMAScript 4 или ES4 ) стало бы первым крупным обновлением ECMAScript с момента публикации третьего издания в 1999 году. Первоначально спецификация (вместе с эталонной реализацией) была запланирована к завершению к октябрю 2008 года. [15] Первый черновик был датирован февралем 1999 года. [16] Обзор языка был выпущен рабочей группой 23 октября 2007 года. [17]

К августу 2008 года предложение ECMAScript 4-й редакции было сокращено до кода проекта ECMAScript Harmony. В то время обсуждались следующие функции Harmony:

Целью этих функций было частично улучшить поддержку программирования в больших , а также позволить пожертвовать частью способности скрипта быть динамичным для повышения производительности. Например, Tamarin — виртуальная машина для ActionScript, разработанная и открытая Adobe — имеет поддержку компиляции just-in-time (JIT) для определенных классов скриптов.

Помимо внедрения новых функций, было предложено исправить некоторые ошибки ES3 в 4-м издании. [18] [19] Эти и другие исправления, а также поддержка кодирования/декодирования JSON были включены в спецификацию ECMAScript 5-го издания. [20]

Работа над 4-й редакцией началась после завершения спецификации ES-CP (Compact Profile) и продолжалась около 18 месяцев, в течение которых медленный прогресс был достигнут в уравновешивании теории спецификации JavaScript 2 Netscape с опытом внедрения JScript .NET от Microsoft. Через некоторое время фокус сместился на стандарт ECMAScript для XML (E4X). Обновление не обошлось без противоречий. В конце 2007 года дебаты между Эйхом, позднее техническим директором Mozilla Foundation , и Крисом Уилсоном, архитектором платформы Microsoft для Internet Explorer , стали публичными в ряде блогов . Уилсон предупредил, что, поскольку предлагаемые изменения в ECMAScript сделали его обратно несовместимым в некоторых отношениях с более ранними версиями языка, обновление равносильно «разрушению Сети» [21], и что заинтересованные стороны, выступавшие против изменений, были «скрыты из виду». [22] Эйх ответил, заявив, что Уилсон, похоже, «повторяет ложь в блогах», и отрицал, что была попытка подавить инакомыслие, и призвал критиков привести конкретные примеры несовместимости. [23] Он указал, что Microsoft Silverlight и Adobe AIR используют C# и ActionScript 3 соответственно, оба из которых больше и сложнее, чем ECMAScript Edition 3. [24]

5-е издание – ECMAScript 2009

Yahoo, Microsoft, Google и другие несогласные с 4-м изданием сформировали свой собственный подкомитет для разработки менее амбициозного обновления ECMAScript 3, предварительно названного ECMAScript 3.1. Это издание будет сосредоточено на обновлениях безопасности и библиотек с большим акцентом на совместимость. После вышеупомянутого публичного спарринга команды ECMAScript 3.1 и ECMAScript 4 договорились о компромиссе: над двумя изданиями будут работать параллельно, с координацией между командами, чтобы гарантировать, что ECMAScript 3.1 останется строгим подмножеством ECMAScript 4 как в семантике, так и в синтаксисе.

Однако различные философии в каждой команде привели к повторным нарушениям правила подмножества, и оставалось сомнительным, что несогласные с ECMAScript 4 когда-либо поддержат или реализуют ECMAScript 4 в будущем. Спустя более года после разногласий по поводу будущего ECMAScript в Техническом комитете Ecma 39, две команды достигли нового компромисса в июле 2008 года: Брендан Эйх объявил, что Ecma TC39 сосредоточит работу на проекте ECMAScript 3.1 (позже переименованном в ECMAScript, 5th Edition) при полном сотрудничестве всех сторон, а поставщики будут нацелены как минимум на две совместимые реализации к началу 2009 года. [25] [26] В апреле 2009 года Ecma TC39 опубликовал «окончательный» проект 5-го издания и объявил, что тестирование совместимых реализаций, как ожидается, будет завершено к середине июля. [27] 3 декабря 2009 года было опубликовано 5-е издание ECMA-262. [28]

Дополнения включают JSON , String.trim()для простого удаления пробелов вокруг строки ( " example "до "example"), String.charAt()для возврата одного символа из заданной позиции в строке и Array.isArray(). Запятая после последней пары значений в объекте ( var example = { "property1":"value1", "property2":"value2", }) также больше не вызывает синтаксическую ошибку. [29]

6-е издание – ECMAScript 2015

6-е издание, ECMAScript 6 ( ES6 ), позднее переименованное в ECMAScript 2015, было завершено в июне 2015 года. [4] [30] Это обновление добавляет значительно новый синтаксис для написания сложных приложений, включая объявления классов ( ), модули ES6, такие как , но определяет их семантически в тех же терминах, что и строгий режим ECMAScript 5. Другие новые функции включают итераторы и циклы, генераторы в стиле Python , выражение стрелочной функции ( ), ключевое слово для локальных объявлений, ключевое слово для константных локальных объявлений, двоичные данные, типизированные массивы, новые коллекции (карты, наборы и WeakMap), обещания , улучшения чисел и математики, отражение, прокси (метапрограммирование для виртуальных объектов и оберток) и литералы шаблонов, использующие обратные кавычки ( ) для многострочных строк без экранированных символов . [31] [32] Полный список обширен. [33] [34] Как первая спецификация «ECMAScript Harmony», она также известна как «ES6 Harmony».class Foo { ... }import * as moduleName from "..."; export const Foofor...of() => {...}letconst`

7-е издание – ECMAScript 2016

Седьмое издание, или ECMAScript 2016, было завершено в июне 2016 года. [5] Его функции включают оператор возведения в степень **для чисел await, asyncключевые слова для асинхронного программирования (в качестве подготовки к ES2017) и Array.prototype.includesфункцию. [5] Оператор возведения в степень эквивалентен Math.pow, но обеспечивает более простой синтаксис, похожий на такие языки, как Python, F#, Perl и Ruby. async/ awaitбыл воспринят как более простой способ использования обещаний и разработки асинхронного кода.

8-е издание – ECMAScript 2017

8-е издание, или ECMAScript 2017, было завершено в июне 2017 года. [6] Его возможности включают функции Object.values, Object.entriesи Object.getOwnPropertyDescriptorsдля легкой манипуляции объектами, async/ awaitконструкции, которые используют генераторы и обещания, а также дополнительные возможности для параллелизма и атомарности . Он также включает String.prototype.padStart(). [35] [6]

9-е издание – ECMAScript 2018

9-е издание, или ECMAScript 2018, было завершено в июне 2018 года. [7] Новые функции включают оператор распространения и остаточные параметры ( ...) для объектных литералов, асинхронную итерацию Promise.prototype.finallyи дополнения к RegExp. [7]

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

пусть объект = { a : 1 , b : 2 }      let objectClone = Object . assign ({}, object ) // до ES2018 let objectClone = {... object } // синтаксис ES2018         пусть другойОбъект = { c : 3 , ... объект } console.log ( другойОбъект ) // -> {c: 3 , a: 1, b : 2}      

10-е издание – ECMAScript 2019

10-е издание, или ECMAScript 2019, было опубликовано в июне 2019 года. [8] Добавленные функции включают, помимо прочего, Array.prototype.flat, Array.prototype.flatMap, изменения в Array.sort, и Object.fromEntries. [8]

Array.sortтеперь гарантированно является стабильным , что означает, что элементы с одинаковыми ключами сортировки не изменят относительный порядок до и после операции сортировки. Array.prototype.flat(depth=1)выравнивает массив до указанной глубины, что означает, что все элементы подмассива (до указанной глубины) рекурсивно объединяются.

Еще одним заметным изменением стало то, что так называемое связывание захватов стало необязательным. [36]

11-е издание – ECMAScript 2020

11-е издание, или ECMAScript 2020, было опубликовано в июне 2020 года. [9] Помимо новых функций, эта версия вводит BigIntпримитивный тип для целых чисел произвольного размера, оператор объединения nullish и объект globalThis . [9]

BigInts создаются либо с помощью BigIntконструктора, либо с помощью синтаксиса 10n, где "n" помещается после числового литерала. BigInts позволяют представлять и манипулировать целыми числами за пределами , в то время как Numbers представляются 64-битным значением IEEE 754Number.MAX_SAFE_INTEGER двойной точности . Встроенные функции в несовместимы с BigInts; например, возведение в степень BigInts должно выполняться с помощью оператора вместо .Math**Math.pow

Оператор объединения nullish, ??, возвращает свой правый операнд, когда его левая часть равна nullили undefined. Это контрастирует с ||оператором , который вернул бы "string"для всех «ложных» значений, таких как приведенные ниже.

undefined ?? "string" // -> "string" null ?? "string" // -> "string" false ?? "string" // -> false NaN ?? "string" // -> NaN            

Необязательное связывание позволяет получить доступ к вложенным свойствам объекта без проверки AND на каждом уровне. Примером является const zipcode = person?.address?.zipcode. Если какие-либо свойства отсутствуют, zipcodeбудет undefined.

12-е издание – ECMAScript 2021

12-е издание, ECMAScript 2021, было опубликовано в июне 2021 года. [10] В этой версии представлен replaceAllметод для строк; Promise.any, комбинатор обещаний, который замыкается при выполнении входного значения; AggregateError, новый тип ошибки для представления нескольких ошибок одновременно; логические операторы присваивания ( ??=, &&=, ||=); WeakRef, для ссылки на целевой объект без сохранения его от сборки мусора, и FinalizationRegistry, для управления регистрацией и отменой регистрации операций очистки, выполняемых, когда целевые объекты подвергаются сборке мусора; разделители для числовых литералов ( 1_000); и Array.prototype.sortбыл сделан более точным, что сократило количество случаев, которые приводят к порядку сортировки, определяемому реализацией.

13-е издание – ECMAScript 2022

13-е издание, ECMAScript 2022, было опубликовано в июне 2022 года. [11] В этой версии представлен верхний уровень await, позволяющий использовать ключевое слово на верхнем уровне модулей; новые элементы класса: публичные и приватные поля экземпляра, публичные и приватные статические поля, приватные методы и методы доступа экземпляра, а также приватные статические методы и методы доступа; статические блоки внутри классов для выполнения инициализации оценки для каждого класса; #x in objсинтаксис для проверки наличия приватных полей в объектах; индексы соответствия регулярных выражений через /dфлаг, который предоставляет начальные и конечные индексы для сопоставленных подстрок; causeсвойство для Errorобъектов, которое можно использовать для записи цепочки причин в ошибках; atметод для строк, массивов и типизированных массивов, который допускает относительное индексирование; и Object.hasOwn, удобная альтернатива Object.prototype.hasOwnProperty.

14-е издание – ECMAScript 2023

14-е издание, ECMAScript 2023, было опубликовано в июне 2023 года. [37] В этой версии представлены методы toSorted, toReversed, with, findLastи для и , а также метод для ; добавлена ​​поддержка комментариев shebang в начале файлов для лучшего упрощения исполняемых файлов ECMAScript; и разрешено использование большинства символов в качестве ключей в слабых коллекциях.findLastIndexArray.prototypeTypedArray.prototypetoSplicedArray.prototype#!

15-е издание – ECMAScript 2024

15-е издание, ECMAScript 2024, было опубликовано в июне 2024 года. [38] В этой версии представлены статические методы Object.groupByи , а также флаг Unicode для регулярных выражений.Map.groupByPromise.withResolvers/v

Методы Object.groupByи Map.groupByгруппируют итерируемый объект, используя возвращаемое значение предоставленной функции обратного вызова.

// выборка данных const arr = [ { year : "2024" , id : 0 }, { year : "2023" , id : 1 }, { year : "2024" , id : 2 }, ];                     const obj = Object.groupBy ( arr , ( el ) = > el.year ) ; console.log ( obj ); // { "2024": [{ year: "2024", id: 0 } , { year : "2024", id: 2 }], "2023": [{ year: "2023", id: 1 }] }       

Promise.withResolversпредоставляет простой способ получить функции разрешения и отклонения обещания напрямую, без необходимости назначать их в конструкторе. [39]

// ES 2023 пусть разрешить ; пусть отклонить ; пусть обещание = новое Обещание (( res , rej ) => { resolve = res ; reject = rej ; });               // ES 2024 const { resolve , reject , promise } = Promise . withResolvers ();       

Флаг /vв регулярных выражениях — это просто улучшенная версия флага /u, но поскольку он вносит обратно несовместимые изменения, его пришлось ввести как новый флаг. [40]

ES.Далее

ES.Next — это динамическое имя, которое относится к следующей версии на момент написания. Функции ES.Next включают в себя готовые предложения (также известные как «предложения 4-го этапа»), перечисленные в готовых предложениях, которые не являются частью ратифицированной спецификации. Языковой комитет следует модели «живой спецификации», поэтому эти изменения являются частью стандарта, а ратификация — формальностью. [41]

Ссылки

  1. ^ "DevEdge Online – Онлайн-справочное руководство по JavaScript". Архивировано из оригинала 14.06.1997 . Получено 13.10.2023 .{{cite web}}: CS1 maint: бот: исходный статус URL неизвестен ( ссылка )
  2. ^ "JavaScript Reference". Архивировано из оригинала 1999-04-20 . Получено 2023-10-13 .{{cite web}}: CS1 maint: бот: исходный статус URL неизвестен ( ссылка )
  3. Архивировано в Ghostarchive и Wayback Machine: «Изменения в JavaScript, часть 1: EcmaScript 5». YouTube. 2009-05-18 . Получено 2013-10-31 .
  4. ^ ab "ECMAScript 2015 Language Specification". Ecma International . Июнь 2015. Архивировано из оригинала 2022-02-14 . Получено 2021-06-28 .
  5. ^ abc "ECMAScript 2016 Language Specification". Ecma International . Июнь 2016. Архивировано из оригинала 2022-02-14 . Получено 2021-06-28 .
  6. ^ abc "ECMAScript 2017 Language Specification". Ecma International . Июнь 2017. Архивировано из оригинала 2021-01-17 . Получено 2021-06-28 .
  7. ^ abc "ECMAScript 2018 Language Specification". Ecma International . Июнь 2018. Архивировано из оригинала 2022-02-14 . Получено 2021-06-28 .
  8. ^ abc "ECMAScript 2019 Language Specification". Ecma International . Июнь 2019. Архивировано из оригинала 2022-02-14 . Получено 2021-06-28 .
  9. ^ abc "ECMAScript 2020 Language Specification". Ecma International . Июнь 2020. Архивировано из оригинала 2021-01-18 . Получено 2021-06-28 .
  10. ^ ab "ECMAScript 2021 Language Specification". Ecma International . Июнь 2021. Архивировано из оригинала 24-06-2021 . Получено 26-06-2021 .
  11. ^ ab "ECMAScript 2022 Language Specification". Ecma International . Июнь 2022. Архивировано из оригинала 2023-12-24 . Получено 2024-07-22 .
  12. ^ "Спецификация языка ECMAScript 2023". Ecma International . Июнь 2023. Архивировано из оригинала 2023-12-20 . Получено 22-07-2024 .
  13. ^ "Спецификация языка ECMAScript 2024". Ecma International . Июнь 2024 г.
  14. ^ 2015-03-24 Заметки о собрании Архивировано 2017-06-23 на Wayback Machine . ESDiscuss. Также см. Ecma отозванные стандарты Архивировано 2015-08-13 на Wayback Machine . ECMA.
  15. ^ Хансен, Ларс Т (2007-10-22). "ES4 overview paper released". mozilla.org . Mail.mozilla.org. Архивировано из оригинала 2013-11-02 . Получено 2013-10-31 .
  16. ^ Пейротт, Себастьян (2021-03-04). "Настоящая история ECMAScript 4". auth0.com . Архивировано из оригинала 2020-05-12 . Получено 2020-03-05 .
  17. ^ "Предлагаемое 4-е издание ECMAScript – Обзор языка" (PDF) . ecmascript.org . 23 октября 2007 г. Архивировано из оригинала (PDF) 23 декабря 2010 г.
  18. ^ Джон Резиг. "Джон Резиг – Исправления ошибок в JavaScript 2". Ejohn.org. Архивировано из оригинала 2013-11-02 . Получено 2013-10-31 .
  19. ^ "Совместимость между ES3 и предложенным ES4" (PDF) . Ecmascript.org. Архивировано из оригинала (PDF) 2014-07-24 . Получено 2013-10-31 .
  20. ^ "Спецификация языка ECMAScript" (PDF) . Ecma International . 2009-04-19. Архивировано из оригинала (PDF) 2009-04-19 . Получено 2018-03-19 .
  21. ^ "ECMAScript 3 и далее – IEBlog – Домашняя страница сайта – Блоги MSDN". Blogs.msdn.com. 2007-10-30. Архивировано из оригинала 2010-02-11 . Получено 2013-10-31 .
  22. ^ "Что я думаю об ES4. – Albatross! – Главная страница сайта – Блоги MSDN". Blogs.msdn.com. 2007-10-31. Архивировано из оригинала 2010-01-27 . Получено 2013-10-31 .
  23. ^ "Открытое письмо Крису Уилсону". Брендан Эйх. 2007-10-31. Архивировано из оригинала 2011-09-16 . Получено 2013-10-31 .
  24. ^ "JavaScript 2 и Open Web". 2007-11-20. Архивировано из оригинала 2014-02-10 . Получено 2014-01-20 .
  25. ^ "ECMAScript Harmony". Mail.mozilla.org. 13 августа 2008 г. Архивировано из оригинала 2013-08-26 . Получено 2013-10-31 .
  26. ^ "Важная веха в стандартизации JavaScript – Блог JScript – Главная страница сайта – Блоги MSDN". Blogs.msdn.com. 2009-04-09. Архивировано из оригинала 2010-03-23 . Получено 2013-10-31 .
  27. ^ "Ecma International завершает основную редакцию ECMAScript". Ecma International. 2009-04-09. Архивировано из оригинала 2011-09-04 . Получено 2009-05-22 .
  28. ^ "Предыдущие новости Ecma". Ecma-international.org. Архивировано из оригинала 2020-04-16 . Получено 2020-03-29 .
  29. ^ Версии JavaScript от W3schools
  30. ^ Крилл, Пол. «Официально: ECMAScript 6 одобрен». InfoWorld . Архивировано из оригинала 23.03.2018 . Получено 19.03.2018 .
  31. ^ "5 замечательных функций EcmaScript 6 (ES6 Harmony) – Wintellect". Wintellect . 2014-03-24. Архивировано из оригинала 2017-07-22 . Получено 2018-03-19 .
  32. ^ "ECMAScript 6 (ES6): Что нового в следующей версии JavaScript". Smashing Magazine . 2015-10-28. Архивировано из оригинала 2017-11-24 . Получено 2018-03-19 .
  33. ^ "ECMAScript 6: Новые возможности: обзор и сравнение". es6-features.org . Архивировано из оригинала 2018-03-18 . Получено 2018-03-19 .{{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  34. ^ "Стандарт ECMA-262 6-е издание / Июнь 2015 г. Спецификация языка ECMAScript 2015 14.2 Определения стрелочных функций". www.ecma-international.org . 2015. Архивировано из оригинала 2022-02-14 . Получено 2021-06-28 .
  35. ^ "ECMAScript 2017 (ES8): окончательный набор функций". 2ality . Архивировано из оригинала 2018-04-23 . Получено 2018-04-23 .
  36. ^ "ES2019: необязательное связывание перехватов". 2ality.com . 2017-08-13 . Получено 26 апреля 2022 г. .
  37. ^ "Спецификация языка ECMAScript 2023". Ecma International . Июнь 2023. Получено 30 июня 2023 г.
  38. ^ "Спецификация языка ECMAScript 2024". Ecma International . Июнь 2024 г.
  39. ^ "Promise.withResolvers() - JavaScript | MDN". developer.mozilla.org . 2023-11-23 . Получено 2024-08-18 .
  40. ^ "Флаг RegExp v с заданной нотацией и свойствами строк · V8". v8.dev . Получено 2024-08-18 .
  41. ^ "ES.Next — это следующее издание спецификации языка ECMAScript — Tuto Javascript". gdevops.gitlab.io . Получено 05.07.2023 .

Внешние ссылки

JavaScript 1.0

Стандарты ИСО

Стандарты ECMA