Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

ECMAScript ( / я . ˙s я . Ɛ м eɪ ы к т ɪ р т / ) (или ES ) [1] является язык программирования общего назначения , стандартизированы Ecma International согласно документу ECMA-262 . Это стандарт JavaScript, предназначенный для обеспечения взаимодействия веб-страниц в разных веб-браузерах. [2] ECMAScript обычно используется для написания сценариев на стороне клиента во всемирной паутине.И он все чаще используется для написания серверных приложений и услуг с использованием Node.js .

ECMAScript, ECMA-262 и JavaScript [ править ]

ECMAScript - это сам язык программирования, указанный в документе ECMA-262. Другими словами, ECMA-262 - это спецификация языка программирования ECMAScript.

JavaScript - это реализация ECMAScript, соответствующая спецификации ECMAScript. Реализации JavaScript также могут предоставлять дополнительные функции, не описанные в спецификации.

История [ править ]

Спецификация ECMAScript - это стандартизированная спецификация языка сценариев, разработанная Бренданом Эйхом из Netscape ; первоначально назывался Mocha, затем LiveScript и, наконец, JavaScript. [3] В декабре 1995 года Sun Microsystems и Netscape объявили о JavaScript в пресс-релизе. [4] В ноябре 1996 года Netscape объявила о собрании организации по стандартизации Ecma International для продвижения стандартизации JavaScript. [5]Первая редакция стандарта ECMA-262 была принята Генеральной ассамблеей Ecma в июне 1997 года. С тех пор было опубликовано несколько редакций языкового стандарта. Название «ECMAScript» было компромиссом между организациями, занимающимися стандартизацией языка, особенно Netscape и Microsoft, чьи споры доминировали на ранних сессиях стандартизации. Эйх прокомментировал, что «ECMAScript всегда был нежелательной торговой маркой, которая звучит как кожная болезнь ». [6] ECMAScript был формализован через операционную семантику по работе в Стэнфордском университете и кафедры вычислительной техники , Imperial College London для анализа безопасности и стандартизации. [7]

Версии [ править ]

Опубликованы одиннадцать выпусков ECMA-262. Работа над версией 11 стандарта была завершена в июне 2020 г. [8]

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

4-е издание (заброшенное) [ править ]

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

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

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

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

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

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

5-е издание [ править ]

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 г. как минимум две совместимые реализации. [26] [27]В апреле 2009 года Ecma TC39 опубликовала «окончательный» проект 5-го издания и объявила, что тестирование совместимых реализаций должно быть завершено к середине июля. [28] 3 декабря 2009 г. было опубликовано 5-е издание ECMA-262. [29]

6-е издание - ECMAScript 2015 [ править ]

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

7-е издание - ECMAScript 2016 [ править ]

7-е издание, или ECMAScript 2016, было завершено в июне 2016 года. [11] Его функции включают в себя блочную область видимости переменных и функций, шаблоны деструктуризации (переменных), правильные хвостовые вызовы, оператор возведения в степень **для чисел await, asyncключевые слова для асинхронного программирования, и Array.prototype.includesфункция. [11] [35]

Оператор возведения в степень эквивалентен Math.pow, но обеспечивает более простой синтаксис, аналогичный таким языкам, как Python, F #, Perl и Ruby. async/ awaitбыл провозглашен более простым способом использования обещаний и разработки асинхронного кода.

8-е издание - ECMAScript 2017 [ править ]

Восьмое издание, или ECMAScript 2017, было завершено в июне 2017 года. [12] Его функции включают функции Object.values, Object.entriesи Object.getOwnPropertyDescriptorsдля простого управления объектами, async/awaitконструкции, использующие генераторы и обещания, а также дополнительные функции для параллелизма и атомики . [36] [12]

9-е издание - ECMAScript 2018 [ править ]

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

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

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

10-е издание - ECMAScript 2019 [ править ]

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

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

11-е издание - ECMAScript 2020 [ править ]

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

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

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

undefined  ??  "строка"  // -> "строка" null  ??  "строка"  // "строка" ложь  ??  "строка"  // -> ложь NaN  ??  "строка"  // -> NaN

Необязательная цепочка позволяет получить доступ к вложенным свойствам объекта без проверки И на каждом уровне.

Пример такой const zipcode = person?.address?.zipcode. Если какой-либо из свойств нет, zipcodeбудет undefined.

ES.Next [ править ]

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

Особенности [ править ]

Язык ECMAScript включает в себя структурированные , динамические , функциональные и прототипные функции. [37]

Императивная и структурированная [ править ]

ECMAScript JavaScript поддерживает структурированное программирование в стиле C. Ранее JavaScript поддерживается только функция область видимости , используя ключевое слово var, но ECMAScript 2015 добавлены ключевые слова letи constпозволяя JavaScript , чтобы поддерживать как блок рамочный и функции области видимости. JavaScript поддерживает автоматическую вставку точки с запятой , что означает, что точки с запятой, которые обычно используются для завершения оператора в C, могут быть опущены в JavaScript. [38]

Как языки C-типа, управление потоком осуществляется с while, for, do/while, if/elseи switchзаявления. Функции слабо типизированы и могут принимать и возвращать любой тип. Аргументы не предоставлены по умолчанию undefined.

Слабо типизированный [ править ]

ECMAScript слабо типизирован . Это означает, что определенные типы присваиваются неявно в зависимости от выполняемой операции. Однако в реализации JavaScript преобразования переменной из одного типа в другой есть несколько причуд. Эти причуды вызвали критику со стороны многих разработчиков. [ необходима цитата ]

Динамический [ править ]

ECMAScript динамически типизирован. Таким образом, тип связан со значением, а не выражением. ECMAScript поддерживает различные способы проверки типа объектов, включая утиную печать . [39]

Транспилирование [ править ]

Начиная с ES 2015, перенос JavaScript стал очень распространенным явлением. Транспиляция - это компиляция из исходного кода в исходный, в которой используются более новые версии JavaScript, а транспилятор переписывает исходный код таким образом, чтобы он поддерживался старыми браузерами. Обычно транспилеры переходят на ES3, чтобы поддерживать совместимость со всеми версиями браузеров. Параметры для переноса в конкретную версию могут быть настроены в соответствии с потребностями. Транспилирование добавляет дополнительный шаг к процессу сборки и иногда выполняется, чтобы избежать необходимости полифиллов.. Полифиллы создают новые функции для старых сред, в которых они отсутствуют. Полифиллы делают это во время выполнения в интерпретаторе, например в браузере пользователя или на сервере. Вместо этого транспилирование перезаписывает сам код ECMA на этапе сборки разработки, прежде чем он попадет в интерпретатор.

Соответствие [ править ]

В 2010 году Ecma International начала разработку стандартного теста для Ecma 262 ECMAScript. [40] Test262 - это набор тестов на соответствие ECMAScript, который можно использовать для проверки того, насколько точно реализация JavaScript соответствует спецификации ECMAScript. Набор тестов содержит тысячи отдельных тестов, каждый из которых проверяет определенные требования спецификации ECMAScript. Разработка Test262 является проектом Технического комитета Ecma 39 (TC39). Структура тестирования и отдельные тесты созданы организациями-членами TC39 и переданы в Ecma для использования в Test262.

Важный вклад внесли Google (набор тестов Sputnik) и Microsoft, которые предоставили тысячи тестов. Набор тестов Test262 состоял из38 014 тестов по состоянию на январь 2020 года . [41] Спецификации ECMAScript через ES7 хорошо поддерживаются в основных веб-браузерах . В таблице ниже показана степень соответствия текущих версий программного обеспечения по отношению к самым последним выпускам ECMAScript.

См. Также [ править ]

  • Сравнение движков компоновки (ECMAScript)
  • ECMAScript для XML (E4X)
  • JavaScript
  • JScript
  • Список движков ECMAScript

Ссылки [ править ]

  1. ^ Стефанов, Стоян (2010). Шаблоны JavaScript . O'Reilly Media, Inc. стр. 5. ISBN 9781449396947. Проверено 12 января 2016 . Основной язык программирования [...] JavaScript основан на стандарте ECMAScript , сокращенно ES.
  2. ^ Wirfs-Brock, Аллен; Айх, Брендан (2020). «JavaScript: первые 20 лет» . Труды ACM по языкам программирования . 4 : 1–189. DOI : 10.1145 / 3386327 . S2CID 219603695 . 
  3. ^ Крил, Пол (2008-06-23). «Создатель JavaScript задумывается о прошлом, будущем» . InfoWorld . Проверено 31 октября 2013 .
  4. ^ «Netscape и Sun анонсируют JavaScript, открытый кроссплатформенный язык сценариев объектов для корпоративных сетей и Интернета» . Netscape. 1995-12-04. Архивировано из оригинала на 2002-06-06 . Проверено 4 ноября 2019 .
  5. ^ «Лидеры отрасли по продвижению стандартизации JavaScript Netscape на собрании органа по стандартизации» . Netscape. 15 ноября, 1996. Архивировано из оригинала на 1998-12-03 . Проверено 31 октября 2013 .
  6. ^ "Будет ли предложен суффикс файла для es4?" . Mail.mozilla.org. 2006-10-03 . Проверено 31 октября 2013 .
  7. ^ Maffeis, Серджио; Митчелл, Джон С .; Талы, Анкур. «Операционная семантика для JavaScript» (PDF) . Ассоциация вычислительной техники .
  8. ^ a b c d «Спецификация языка ECMAScript 2020» . Ecma International . Июнь 2020.
  9. ^ «Изменения в JavaScript, часть 1: EcmaScript 5» . YouTube. 2009-05-18 . Проверено 31 октября 2013 .
  10. ^ a b «Спецификация языка ECMAScript 2015» . Ecma International . Июнь 2015 г.
  11. ^ a b c «Спецификация языка ECMAScript 2016» . Ecma International . Июнь 2016 г.
  12. ^ a b c «Спецификация языка ECMAScript 2017» . Ecma International . Июнь 2017 г.
  13. ^ a b c «Спецификация языка ECMAScript 2018» . Ecma International . Июнь 2018 г.
  14. ^ a b c «Спецификация языка ECMAScript 2019» . Ecma International . Июнь 2019.
  15. ^ 2015-03-24 Заметки о встрече . ESDiscuss. См. Также отмененные стандарты Ecma . ECMA.
  16. ^ "Выпущен обзорный документ ES4" . Mail.mozilla.org . Проверено 31 октября 2013 .
  17. ^ «Настоящая история ECMAScript 4» .
  18. ^ «Предлагаемое 4-е издание ECMAScript - Обзор языка» (PDF) . ecmascript.org . 23 октября 2007 г. Архивировано из оригинального (PDF) 13 июля 2010 г.
  19. ^ Джон Ресиг. «Джон Ресиг - Исправления ошибок в JavaScript 2» . Ejohn.org . Проверено 31 октября 2013 .
  20. ^ «Совместимость между ES3 и предлагаемым ES4» (PDF) . Ecmascript.org. Архивировано из оригинального (PDF) 24 июля 2014 года . Проверено 31 октября 2013 .
  21. ^ «Спецификация языка ECMAScript» (PDF) . Ecma International . 2009-04-19. Архивировано из оригинального (PDF) 19 апреля 2009 года . Проверено 19 марта 2018 .
  22. ^ «ECMAScript 3 и выше - IEBlog - Домашняя страница сайта - MSDN Blogs» . Blogs.msdn.com. 2007-10-30 . Проверено 31 октября 2013 .
  23. ^ «Что я думаю о ES4. - Альбатрос! - Домашняя страница - Блоги MSDN» . Blogs.msdn.com. 2007-10-31 . Проверено 31 октября 2013 .
  24. ^ «Открытое письмо Крису Уилсону» . Брендан Эйх. 2007-10-31 . Проверено 31 октября 2013 .
  25. ^ «JavaScript 2 и открытый Интернет» . 2007-11-20 . Проверено 20 января 2014 .
  26. ^ "Гармония ECMAScript" . Mail.mozilla.org . Проверено 31 октября 2013 .
  27. ^ «Важная веха в стандартизации JavaScript - Блог JScript - Домашняя страница сайта - Блоги MSDN» . Blogs.msdn.com. 2009-04-09 . Проверено 31 октября 2013 .
  28. ^ "Ecma International завершает основную редакцию ECMAScript" . Ecma International. 2009-04-09 . Проверено 22 мая 2009 .
  29. ^ "Предыдущие новости Ecma" . Ecma-international.org . Проверено 29 марта 2020 .
  30. ^ Криль, Пол. «Официально: ECMAScript 6 одобрен» . InfoWorld . Проверено 19 марта 2018 .
  31. ^ «5 замечательных функций в EcmaScript 6 (ES6 Harmony) - Wintellect» . Wintellect . 2014-03-24 . Проверено 19 марта 2018 .
  32. ^ «ECMAScript 6 (ES6): что нового в следующей версии JavaScript» . Smashing Magazine . 2015-10-28 . Проверено 19 марта 2018 .
  33. ^ «ECMAScript 6: Новые возможности: обзор и сравнение» . es6-features.org . Проверено 19 марта 2018 .
  34. ^ «Стандарт ECMA-262, 6-е издание / июнь 2015 г. Спецификация языка ECMAScript 2015 14.2. Определения стрелочных функций» . www.ecma-international.org . 2015 г.
  35. ^ Сабофф, Майкл (2016-05-23). «Правильные хвостовые вызовы ECMAScript 6 в WebKit» . WebKit . Проверено 11 апреля 2019 .
  36. ^ «ECMAScript 2017 (ES8): последний набор функций» . 2ality . Проверено 23 апреля 2018 .
  37. ^ "О" . ECMAScript. Архивировано из оригинала на 2012-08-02 . Проверено 17 декабря 2009 .
  38. Дэвид Фланаган (17 августа 2006 г.). JavaScript: Полное руководство: Полное руководство . "O'Reilly Media, Inc.". п. 16. ISBN 978-0-596-55447-7.
  39. ^ "Типы данных и структуры данных JavaScript - JavaScript | MDN" . Developer.mozilla.org . 2017-02-16 . Проверено 24 февраля 2017 .
  40. ^ «Язык ECMAScript - test262» . Test262.ecmascript.org. Архивировано из оригинала на 2011-05-14 . Проверено 31 октября 2013 .
  41. ^ "tc39 / test262" . GitHub . 24 января 2020 . Проверено 29 января 2020 года .
  42. ^ ES5 является базовым для этого набора тестов. Уровень соответствия для других выпусков отражает только поддержку новых функций, а не полную оценку.
  43. ^ "Таблица совместимости ECMAScript 5" . kangax.github.io . Проверено 8 ноября 2018 .
  44. ^ "Таблица совместимости ECMAScript 6" . kangax.github.io . Проверено 8 ноября 2018 .
  45. ^ a b «Таблица совместимости ECMAScript 2016+» . kangax.github.io . Проверено 8 ноября 2018 .
  46. ^ Составная партитура, включающая новые функции от ES7 до черновиков следующего издания

Внешние ссылки [ править ]

Стандарты ISO [ править ]

  • ISO 16262

Стандарты ECMA [ править ]

  • ECMA-262
    • ECMA-262 Спецификация языка ECMAScript, 3-е издание (декабрь 1999 г.)
    • Спецификация языка ECMAScript, выпуск 3, финал, 24 марта 00 г.
    • 4-е издание (обзор): PDF
    • 4-е издание (окончательный вариант): HTML , PDF
    • ECMA-262 Спецификация языка ECMAScript, 5-е издание (декабрь 2009 г.)
    • Версия 5.1 / июнь 2011 г .: HTML , PDF
    • 6-е издание / июнь 2015 г. (спецификация языка ECMAScript 2015): HTML , PDF
    • 7-е издание / июнь 2016 г. (спецификация языка ECMAScript 2016): HTML , PDF
    • 8-е издание, июнь 2017 г. (спецификация языка ECMAScript 2017): HTML , PDF
    • 9-е издание, июнь 2018 г. (спецификация языка ECMAScript 2018): HTML , PDF
    • 10-е издание, июнь 2019 г. (спецификация языка ECMAScript 2019): HTML , PDF
  • ECMA-290 Спецификация компонентов ECMAScript (июнь 1999 г.)
  • ECMA-327 ECMAScript 3rd Edition Compact Profile (июнь 2001 г.)
  • ECMA-357 ECMAScript for XML (E4X) Specification (июнь 2004 г.)