EcmaScript Спецификация или язык программирования?
ECMAScript — это встраиваемый расширяемый не имеющий средств ввода-вывода язык программирования, используемый в качестве основы для построения других скриптовых языков. Стандартизирован международной организацией ECMA в спецификации ECMA-262. Расширения языка: JavaScript, JScript и ActionScript.
Английская версия
ECMAScript (or ES) is a trademarked scripting-language specification standardized by Ecma International in ECMA-262 and ISO/IEC 16262.
- Так всё-таки EcmaScript это спецификация или язык программирования? Получается в Вики ошибка или что? Текст написан про EcmaScript в русской вики
Язык возник на основе нескольких технологий, самыми известными из которых являются языки JavaScript и JScript. Разработка первой редакции спецификации началась в ноябре 1996 года.
Да я копаю в основы и тд. Уж лучше так медленней понимать и знать что да как, чем после 20 минут JavaScript(a) идти во фреймворки и пытаться понять как там всё работает -_-
ECMAScript
ECMAScript ( / я . ˙s я . Ɛ м eɪ ы к т ɪ р т / ) (или ES ) [1] является язык программирования общего назначения , стандартизированы Ecma International согласно документу ECMA-262 . Это стандарт JavaScript, предназначенный для обеспечения взаимодействия веб-страниц в разных веб-браузерах. [2] ECMAScript обычно используется для написания сценариев на стороне клиента во всемирной паутине.И он все чаще используется для написания серверных приложений и услуг с использованием Node.js .
- 1 ECMAScript, ECMA-262 и JavaScript
- 2 История
- 2.1 Версии
- 2.2 4-е издание (заброшено)
- 2.3 5-е издание
- 2.4 6-е издание — ECMAScript 2015
- 2.5 7-е издание — ECMAScript 2016
- 2.6 8-е издание — ECMAScript 2017
- 2.7 9-е издание — ECMAScript 2018
- 2.8 10-е издание — ECMAScript 2019
- 2.9, 11-е издание — ECMAScript 2020
- 2.10 ES.Next
- 3.1 Императивная и структурированная
- 3.2 Слабо типизированный
- 3.3 Динамический
- 3.4 Транспилирование
- 7.1 стандарты ISO
- 7.2 Стандарты ECMA
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]
История версий ECMAScript
Версия Дата публикации Имя Изменения по сравнению с предыдущей редакцией редактор 1 Июнь 1997 г. Первое издание Гай Л. Стил мл. 2 Июнь 1998 г. Редакционные изменения, чтобы спецификация полностью соответствовала международному стандарту ISO / IEC 16262. Майк Коулишоу 3 Декабрь 1999 г. Добавлены регулярные выражения , улучшенная обработка строк, новые управляющие операторы, обработка исключений try / catch, более точное определение ошибок, форматирование для числового вывода и другие улучшения. Майк Коулишоу 4 Заброшен (последний проект 30 июня 2003 г.) От четвертого издания отказались из-за политических разногласий относительно языковой сложности. Многие функции, предложенные для четвертого издания, были полностью исключены; некоторые были включены в шестое издание. 5 Декабрь 2009 г. Добавляет «строгий режим», подмножество, предназначенное для обеспечения более тщательной проверки ошибок и предотвращения подверженных ошибкам конструкций. Разъясняет многие двусмысленности в спецификации 3-го издания и учитывает поведение реальных реализаций, которые постоянно отличались от этой спецификации. Добавляет некоторые новые функции, такие как методы получения и установки, поддержку библиотеки для JSON и более полное отражение свойств объекта. [9] Пратап Лакшман, Аллен Вирфс-Брок 5.1 Июнь 2011 г. Эта редакция 5.1 стандарта ECMAScript полностью соответствует третьей редакции международного стандарта ISO / IEC 16262: 2011. Пратап Лакшман, Аллен Вирфс-Брок 6 Июнь 2015 [10] ECMAScript 2015 (ES2015) См. 6-е издание — ECMAScript 2015 Аллен Вирфс-Брок 7 Июнь 2016 [11] ECMAScript 2016 (ES2016) См. 7-е издание — ECMAScript 2016 Брайан Терлсон 8 Июнь 2017 [12] ECMAScript 2017 (ES2017) См. 8-е издание — ECMAScript 2017 Брайан Терлсон 9 Июнь 2018 [13] ECMAScript 2018 (ES2018) См. 9-е издание — ECMAScript 2018 Брайан Терлсон 10 Июнь 2019 [14] ECMAScript 2019 (ES2019) См. 10-е издание — ECMAScript 2019 Брайан Терлсон, Брэдли Фариас, Джордан Харбанд 11 Июнь 2020 [8] ECMAScript 2020 (ES2020) См. 11-е издание — ECMAScript 2020 Джордан Харбанд, Кевин Смит В июне 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 Foo for . of () => <. >let const , числовые и математические улучшения, отражение, прокси (метапрограммирование для виртуальных объектов и оболочек) и литералы шаблонов для строк. [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 ) // ->
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»), перечисленные в готовых предложениях , которые не являются частью утвержденной спецификации. Языковой комитет следует модели «живой спецификации», поэтому эти изменения являются частью стандарта, а ратификация — формальностью. [ необходима цитата ]
Особенности [ править ]
Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( Февраль 2017 г. )
Основные статьи: синтаксис ECMAScript и функции JavaScript §Язык 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]
Транспилирование [ править ]
Основная статья: транспайлеры JavaScript §
Начиная с 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.
Соответствие движка сценариев
Движок сценариев Справочное приложение (я) Соответствие [42] ES5 [43] ES6 (2015) [44] ES7 (2016) [45] Новее (2017+) [45] [46] Чакра Microsoft Edge 18 100% 96% 100% 33% ПаукОбезьяна Firefox 79 100% 98% 100% 100% V8 Google Chrome 84, Microsoft Edge 84, Opera 70 100% 98% 100% 100% JavaScriptCore Safari 13.1 99% 99% 100% 84% См. Также [ править ]
- Сравнение движков компоновки (ECMAScript)
- ECMAScript для XML (E4X)
- JavaScript
- JScript
- Список движков ECMAScript
Ссылки [ править ]
- ^ Стефанов, Стоян (2010). Шаблоны JavaScript . O’Reilly Media, Inc. стр. 5. ISBN 9781449396947 . Проверено 12 января 2016 . Основной язык программирования [. ] JavaScript основан на стандарте ECMAScript , сокращенно ES.
- ^ Wirfs-Brock, Аллен; Айх, Брендан (2020). «JavaScript: первые 20 лет» . Труды ACM по языкам программирования . 4 : 1–189. DOI : 10.1145 / 3386327 . S2CID 219603695 .
- ^ Крил, Пол (2008-06-23). «Создатель JavaScript задумывается о прошлом, будущем» . InfoWorld . Проверено 31 октября 2013 .
- ^ «Netscape и Sun анонсируют JavaScript, открытый кроссплатформенный язык сценариев объектов для корпоративных сетей и Интернета» . Netscape. 1995-12-04. Архивировано из оригинала на 2002-06-06 . Проверено 4 ноября 2019 .
- ^ «Лидеры отрасли по продвижению стандартизации JavaScript Netscape на собрании органа по стандартизации» . Netscape. 15 ноября, 1996. Архивировано из оригинала на 1998-12-03 . Проверено 31 октября 2013 .
- ^ «Будет ли предложен суффикс файла для es4?» . Mail.mozilla.org. 2006-10-03 . Проверено 31 октября 2013 .
- ^ Maffeis, Серджио; Митчелл, Джон С .; Талы, Анкур. «Операционная семантика для JavaScript» (PDF) . Ассоциация вычислительной техники .
- ^ a b c d «Спецификация языка ECMAScript 2020» . Ecma International . Июнь 2020.
- ^ «Изменения в JavaScript, часть 1: EcmaScript 5» . YouTube. 2009-05-18 . Проверено 31 октября 2013 .
- ^ a b «Спецификация языка ECMAScript 2015» . Ecma International . Июнь 2015 г.
- ^ a b c «Спецификация языка ECMAScript 2016» . Ecma International . Июнь 2016 г.
- ^ a b c «Спецификация языка ECMAScript 2017» . Ecma International . Июнь 2017 г.
- ^ a b c «Спецификация языка ECMAScript 2018» . Ecma International . Июнь 2018 г.
- ^ a b c «Спецификация языка ECMAScript 2019» . Ecma International . Июнь 2019.
- ^ 2015-03-24 Заметки о встрече . ESDiscuss. См. Также отмененные стандарты Ecma . ECMA.
- ^ «Выпущен обзорный документ ES4» . Mail.mozilla.org . Проверено 31 октября 2013 .
- ^ «Настоящая история ECMAScript 4» .
- ^ «Предлагаемое 4-е издание ECMAScript — Обзор языка» (PDF) . ecmascript.org . 23 октября 2007 г. Архивировано из оригинального (PDF) 13 июля 2010 г.
- ^ Джон Ресиг. «Джон Ресиг — Исправления ошибок в JavaScript 2» . Ejohn.org . Проверено 31 октября 2013 .
- ^ «Совместимость между ES3 и предлагаемым ES4» (PDF) . Ecmascript.org. Архивировано из оригинального (PDF) 24 июля 2014 года . Проверено 31 октября 2013 .
- ^ «Спецификация языка ECMAScript» (PDF) . Ecma International . 2009-04-19. Архивировано из оригинального (PDF) 19 апреля 2009 года . Проверено 19 марта 2018 .
- ^ «ECMAScript 3 и выше — IEBlog — Домашняя страница сайта — MSDN Blogs» . Blogs.msdn.com. 2007-10-30 . Проверено 31 октября 2013 .
- ^ «Что я думаю о ES4. — Альбатрос! — Домашняя страница — Блоги MSDN» . Blogs.msdn.com. 2007-10-31 . Проверено 31 октября 2013 .
- ^ «Открытое письмо Крису Уилсону» . Брендан Эйх. 2007-10-31 . Проверено 31 октября 2013 .
- ^ «JavaScript 2 и открытый Интернет» . 2007-11-20 . Проверено 20 января 2014 .
- ^ «Гармония ECMAScript» . Mail.mozilla.org . Проверено 31 октября 2013 .
- ^ «Важная веха в стандартизации JavaScript — Блог JScript — Домашняя страница сайта — Блоги MSDN» . Blogs.msdn.com. 2009-04-09 . Проверено 31 октября 2013 .
- ^ «Ecma International завершает основную редакцию ECMAScript» . Ecma International. 2009-04-09 . Проверено 22 мая 2009 .
- ^ «Предыдущие новости Ecma» . Ecma-international.org . Проверено 29 марта 2020 .
- ^ Криль, Пол. «Официально: ECMAScript 6 одобрен» . InfoWorld . Проверено 19 марта 2018 .
- ^ «5 замечательных функций в EcmaScript 6 (ES6 Harmony) — Wintellect» . Wintellect . 2014-03-24 . Проверено 19 марта 2018 .
- ^ «ECMAScript 6 (ES6): что нового в следующей версии JavaScript» . Smashing Magazine . 2015-10-28 . Проверено 19 марта 2018 .
- ^ «ECMAScript 6: Новые возможности: обзор и сравнение» . es6-features.org . Проверено 19 марта 2018 .
- ^ «Стандарт ECMA-262, 6-е издание / июнь 2015 г. Спецификация языка ECMAScript 2015 14.2. Определения стрелочных функций» . www.ecma-international.org . 2015 г.
- ^ Сабофф, Майкл (2016-05-23). «Правильные хвостовые вызовы ECMAScript 6 в WebKit» . WebKit . Проверено 11 апреля 2019 .
- ^ «ECMAScript 2017 (ES8): последний набор функций» . 2ality . Проверено 23 апреля 2018 .
- ^ «О» . ECMAScript. Архивировано из оригинала на 2012-08-02 . Проверено 17 декабря 2009 .
- ↑ Дэвид Фланаган (17 августа 2006 г.). JavaScript: Полное руководство: Полное руководство . «O’Reilly Media, Inc.». п. 16. ISBN
- 978-0-596-55447-7.
- ^ «Типы данных и структуры данных JavaScript — JavaScript | MDN» . Developer.mozilla.org . 2017-02-16 . Проверено 24 февраля 2017 .
- ^ «Язык ECMAScript — test262» . Test262.ecmascript.org. Архивировано из оригинала на 2011-05-14 . Проверено 31 октября 2013 .
- ^ «tc39 / test262» . GitHub . 24 января 2020 . Проверено 29 января 2020 года .
- ^ ES5 является базовым для этого набора тестов. Уровень соответствия для других выпусков отражает только поддержку новых функций, а не полную оценку.
- ^ «Таблица совместимости ECMAScript 5» . kangax.github.io . Проверено 8 ноября 2018 .
- ^ «Таблица совместимости ECMAScript 6» . kangax.github.io . Проверено 8 ноября 2018 .
- ^ a b «Таблица совместимости ECMAScript 2016+» . kangax.github.io . Проверено 8 ноября 2018 .
- ^ Составная партитура, включающая новые функции от 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
- ActionScript
- Caja
- JavaScript
- двигатели
- asm.js
- Carakan
- Футарк
- InScript
- JavaScriptCore
- JScript
- KJS
- Линейное письмо B
- Нарцисс
- QtScript
- Носорог
- ПаукОбезьяна
- TraceMonkey
- JägerMonkey
- Чакра
- Chaplin.js
- Додзё
- Эхо
- Внешний JS
- Google Web Toolkit
- jQuery
- Живое ядро
- Midori
- MochiKit
- MooTools
- Прототип
- Pyjs
- qooxdoo
- Риальто
- Рико
- script.aculo.us
- SproutCore
- Spry
- Ваканда Фреймворк
- AppJet
- Дено
- Джаксер
- Node.js
- WakandaDB
- Backbone.js
- SWFObject
- SWFAddress
- Underscore.js
- Брендан Эйх
- Дуглас Крокфорд
- Джон Ресиг
- Скотт Айзекс
- DHTML
- Ecma International
- JSDoc
- JSGI
- JSHint
- JSLint
- JSON
- JSSS
- Спутник
- SunSpider
- Определение асинхронного модуля
- CommonJS
Списки Библиотеки JavaScript Фреймворки Ajax Сравнения Фреймворки JavaScript серверный JavaScript
- Escape-код ANSI
- Общая языковая инфраструктура
- Office Open XML
- OpenXPS
- Продвинутая интеллектуальная лента
- DDS
- DLT
- Супер DLT
- Голографический универсальный диск
- Линейная лента-открытая (Ultrium-1)
- VXA
- CD-ROM
- Файловая система компакт-диска (CDFS)
- ТОЛСТЫЙ
- FAT12
- FAT16
- FAT16B
- Универсальный 3D
- C ++ / CLI
- C #
- Эйфелева
- JavaScript ( E4X , ECMAScript )
- Дротик
Список стандартов Ecma (1961-настоящее время)
Список стандартов ISO / romanizations ISO / стандартам МЭК- 20000
- 20022
- 20121
- 20400
- 21000
- 21047
- 21500
- 21827
- 22000
- 22300
- 22395
- 23090-3
- 23270
- 23271
- 23360
- 24517
- 24613
- 24617
- 24707
- 25178
- 25964
- 26000
- 26262
- 26300
- 26324
- 27000 серии
- 27000
- 27001
- 27002
- 27005
- 27006
- 27729
- 28000
- 29110
- 29148
- 29199-2
- 29500
- Категория
- IEC 60027
- IEC 60034
- IEC 60038
- IEC 60062
- IEC 60063
- IEC 60068
- IEC 60112
- IEC 60228
- IEC 60269
- IEC 60297
- IEC 60309
- IEC 60320
- IEC 60364
- IEC 60446
- IEC 60559
- IEC 60601
- IEC 60870
- МЭК 60870-5
- МЭК 60870-6
- AES3
- S / PDIF
- МЭК 61131-3
- МЭК 61131-9
- ISO / IEC 646
- ISO / IEC 2022
- ISO / IEC 4909
- ISO / IEC 5218
- ISO / IEC 6429
- ISO / IEC 6523
- ISO / IEC 7810
- ISO / IEC 7811
- ISO / IEC 7812
- ISO / IEC 7813
- ISO / IEC 7816
- ISO / IEC 7942
- ISO / IEC 8613
- ISO / IEC 8632
- ISO / IEC 8652
- ISO / IEC 8859
- ИСО / МЭК 9126
- ИСО / МЭК 9293
- ISO / IEC 9496
- ISO / IEC 9529
- ISO / IEC 9592
- ISO / IEC 9593
- ISO / IEC 9899
- ISO / IEC 9945
- ISO / IEC 9995
- ISO / IEC 10021
- ИСО / МЭК 10116
- ISO / IEC 10165
- ИСО / МЭК 10179
- ИСО / МЭК 10646
- ISO / IEC 10967
- ИСО / МЭК 11172
- ИСО / МЭК 11179
- ISO / IEC 11404
- ISO / IEC 11544
- ISO / IEC 11801
- ISO / IEC 12207
- ISO / IEC 13250
- ISO / IEC 13346
- ИСО / МЭК 13522-5
- ISO / IEC 13568
- ISO / IEC 13816
- ИСО / МЭК 13818
- ISO / IEC 14443
- ISO / IEC 14496
- ISO / IEC 14651
- ISO / IEC 14750
- ISO / IEC 14882
- ISO / IEC 15288
- ISO / IEC 15291
- ISO / IEC 15408
- ISO / IEC 15444
- ISO / IEC 15445
- ISO / IEC 15504
- ISO / IEC 15511
- ИСО / МЭК 15693
- ИСО / МЭК 15897
- ISO / IEC 15938
- ISO / IEC 16262
- ISO / IEC 17024
- ISO / IEC 17025
- ISO / IEC 18000
- ISO / IEC 18004
- ISO / IEC 18014
- ISO / IEC 19752
- ISO / IEC 19757
- ISO / IEC 19770
- ISO / IEC 19788
- ISO / IEC 20000
- ISO / IEC 21000
- ISO / IEC 21827
- ISO / IEC 23000
- ISO / IEC 23003
- ISO / IEC 23008
- ISO / IEC 23270
- ISO / IEC 23360
- ISO / IEC 24707
- ISO / IEC 24727
- ISO / IEC 24744
- ISO / IEC 24752
- ISO / IEC 26300
- ISO / IEC 27000
- ISO / IEC серии 27000
- ISO / IEC 27002
- ISO / IEC 27040
- ISO / IEC 29110
- ИСО / МЭК 29119
- ISO / IEC 33001
- ISO / IEC 38500
- ISO / IEC 42010
- ISO / IEC 80000
- Международная электротехническая комиссия
ECMAScript 1 и 2: на пути к стандартизации
Первый стандарт ECMAScript был основан на версии JavaScript, входившей в состав Netscape Navigator 4 и не включал в себя важные особенности, такие как регулярные выражения, JSON, исключения и важные методы для встроенных объектов. Тем не менее, в браузере он работал намного лучше. Версия 1 была выпущена в июне 1997 года.
Несомненно, сама идея использования этого объекта появилась в Internet Explorer 5. Однако только в Internet Explorer 7 Microsoft начала следовать стандартам. Некоторые устаревшие сайты для правильной работы до сих пор требуют использования старых версий Internet Explorer.
ECMAScript 3.1 and 4: годы борьбы
К сожалению, следующие несколько лет не принесли JavaScript ничего хорошего. Вместе с началом работы над ECMAScript 4 в сообществе, разбившемся на группы, начались разногласия. Одна группа утверждала, что JavaScript необходимо сделать языком для разработки крупных приложений. Эта группа предлагала множество новых опций большого объёма, требовавших внесения кардинальных изменений. Другая группа находила подобный вектор развития недопустимым. Отсутствие компромиссов и сложность некоторых предлагавшихся улучшений отодвигали выход ECMAScript 4 всё дальше и дальше.
Работа над ECMAScript 4 началась вскоре после выхода третьей версии в 1999 году. Большое количество интересных нововведений обсуждалось в Netscape. Однако интерес к ним со временем иссяк, и в 2003 году работа над новой версией ECMAScript остановилась. Был выпущен промежуточный отчёт, и некоторые разработчики, такие, как Adobe (ActionScript) и Microsoft (JScript.NET) использовали его в качестве основы для собственных движков. В 2005 году AJAX и XMLHttpRequest смогли вновь разжечь интерес к новой версии JavaScript и TC-39 возобновила работу. Проходили годы и набор нововведений рос всё больше и больше. В самый разгар разработки ECMAScript 4 включал такие опции как:
- Классы
- Интерфейсы
- Пространства имён
- Пакеты
- Опциональные аннотации типов
- Опциональная статическая проверка типов
- Структурные типы
- Объявления типов
- Мультиметоды
- Параметризованные типы
- Хвостовые рекурсии
- Итераторы
- Генераторы
- Интроспекция
- Разбор типа для обработчиков исключений
- Связывание констант
- Правильный обзор блоков
- Деструктуризация
- Сжатые функциональные выражения
- Поддержка массивов
Проектная документация ECMAScript 4 описывает эту версию, как предназначенную для большого программирования. Если вы знакомы с ECMAScript 6/2015, вы можете заметить, что в ней воплощены многие возможности из перечисленных выше.
Несмотря на гибкость и кажущуюся мощность, на практике ES3 оказывается совершенно непригодным для разработки программ большого объёма. Программы, написанные на ECMAScript, становятся крупнее и сложнее благодаря применению Ajax и повсеместному использованию ECMAScript в приложениях в качестве скриптового языка. Разработка больших программ может существенно выиграть благодаря таким нововведениям, как статическая проверка типов, скрытие имен, ранняя связка и прочим оптимизационным приёмам, которые отсутствуют в ES3. — ECMAScript 4 draft
Эта таблица может послужить интересным дополнением к истории. В ней отображены состояния различных дополнений и обсуждения групп, участвующих в разработке.
Комитет, разрабатывавший ECMAScript 4, включал в себя Adobe, Mozilla, Opera (неофициально) и Microsoft. Yahoo вошла в игру, когда большинство решений по стандартам и возможностям были уже приняты, прислав Дугласа Крокфорда, влиятельного JavaScript-разработчика, который тут же раскритиковал большинство новшеств, получив мощную поддержку со стороны представителя Microsoft.
Оказалось, что у представителя Microsoft были точно такие же сомнения — он тоже считал, что язык становится слишком большим и выходит из-под контроля. Он ничего не говорил до моего присоединения к группе, так как боялся, что если Microsoft попытается выразить эту точку зрения, её обвинят в антиконкурентном поведении. Учитывая поведение Microsoft в прошлом, можно сказать, что у него были причины этого бояться, и как выяснилось, не безосновательные. Однако я убедил его, что Microsoft должна поступить правильно, и он, в свою очередь, смог убедить Microsoft изменить свою позицию относительно ES4.- Douglas Crockford — The State and Future of JavaScript
То, что началось как сомнения, быстро переросло в сильную оппозицию к JavaScript. Microsoft наотрез отказывалась утверждать любую часть ECMAScript 4 и была готова к любым действиям, включая судебные тяжбы, чтобы не дать стандарту возможности быть утвержденным. К счастью, члены комитета смогли избежать судебных разбирательств. Однако из-за разногласий ECMASCript 4 продолжал топтаться на месте.
Microsoft хотела играть по-крупному. Люди в Microsoft собирались завалить комитет бумажной волокитой и начать подавать жалобы в различные инстанции. Я не хотел ничего такого. Мои разногласия с ES4 были исключительно техническими, и я хотел, чтобы они таковыми и оставались. Я хотел разобраться, как всё сделать правильно, поэтому я старался уменьшить напряжение. Тем не менее Microsoft заняли бескомпромиссную позицию, наотрез отказываясь принимать любую часть ES4, из-за чего комитет разбился на два лагеря. Хотя лично мне кажется, что это произошло потому, что команда ES4 не желала рассматривать альтернативные точки зрения. В тот момент комитет раздирали противоречия, и это было очень плохо, так как группа, занимающаяся стандартами, должна пребывать в состоянии полного согласия. Стандарты не должны быть противоречивыми. — Douglas Crockford. — The State and Future of JavaScript
Крокфорд выступил с идеей о создании более простого, уменьшенного набора опций для нового стандарта, такого, с которым все могли бы согласиться: никакого нового синтаксиса, только практичные улучшения, основанные на опыте использования языка. Результатом этого предложения стал стандарт, известный, как ECMAScript 3.1.
В результате началась одновременная работа над двумя стандартами, для чего были созданы два неофициальных комитета. ECMAScript 4 по-прежнему был слишком сложным, споры вокруг него не утихали, и закончить его в ближайшее время не представлялось возможным. ECMAScript 3.1 был намного проще и, несмотря на разногласия в ECMA, работа над ним была успешно закончена.
Окончательная точка в деле ECMAScript 4 была поставлена в 2008 году, в электронном письме Айка, в котором он подвёл итоги встречи в Осло, где обсуждалась дальнейшая судьба ECMAScript и будущее версий 3.1 и 4.
Решения, принятые на этой встрече:
- сфокусироваться на работе над ES3.1 при полном сотрудничестве всех участников и выпустить две совместимые версии в начале следующего года;
- начать работу над следующим шагом после ES3.1, который будет включать в себя синтаксические расширения, но более скромные, нежели те, которые предлагались для ES4 как в плане семантических, так и синтаксических инноваций;
- ради всеобщего блага было решено отказаться от некоторых из предложений ES4: пакетов, пространства имен и ранней связки. Они были признаны бесполезными для веба. Это решение — ключ к Гармонии;
- прочие идеи и цели ES4 были перефразированы с целью достичь консенсуса внутри комитета, например, понятие классов, основанное на имеющихся концептах ES3, совмещённых с предлагаемыми улучшениями ES3.1.
В результате ушло почти восемь лет на то, чтобы закончить разработку ECMAScript 4. Тяжелый урок для всех, кто принимал участие.
Слово «Гармония», появившееся в перечисленных решениях, стало названием проекта в будущих версиях. Harmony станет альтернативой, с которой все будут согласны. После выхода ECMAScript 3.1 (в виде версии 5, как будет рассказано чуть ниже) ECMAScript Harmony стала тем местом, где обсуждаются все новые идеи относительно JavaScript.
ActionScript
ActionScript стал языком программирования, основанным на ранней версии ECMAScript 4. Adobe включил его в состав пакета инструментов для Flash-разработки, и это был единственный скриптовый язык, поддерживаемый этим пакетом. Благодаря этому языку Adobe выразила свою позицию относительно ECMAScript 4, впоследствии выпустив его open-source версию (Tamarin) в надежде ускорить разработку ECMAScript 4. Майк Чамберс, работник Adobe, выразил свою позицию по этому поводу:
ActionScript 3 никуда не денется, и мы не будем ничего из него убирать. Мы продолжим следить за развитием ECMAScript, делая всё возможное для дальнейшего развития интернета, как и прежде. — Mike Chamber’s blog
Разработчики ActionScript надеялись, что нововведения, использованные в этом языке, станут впоследствии частью ECMAScript. К сожалению, никто не обратил на них никакого внимания и ECMAScript 2015 был в большинстве своем несовместим с ActionScript.
Некоторые считали подобный ход попыткой Microsoft сохранить за собой контроль над языком и его реализациями. Единственным жизнеспособным движком для ECMAScript 4 на тот момент был Tamarin, поэтому Microsoft, занимавшая 80% рынка интернет-браузеров, могла продолжать использовать собственный движок без необходимости проводить дорогостоящую адаптацию под новый стандарт или пользоваться движком конкурента. Кто-то считал, что возражения Microsoft носили чисто технический характер, как у Yahoo. Движок Microsoft, JScript, на тот момент имел очень много отличий от других реализаций.
ActionScript по сегодняшний день остаётся языком для Flash, который начал терять популярность благодаря приходу HTML5.
ActionScript остаётся ярким примером того, как мог выглядеть ECMAScript 4, если бы он был реализован в популярных движках JavaScript:
Что такое E4X?
E4X — это название, которое получило расширение ECMAScript, выпущенное в годы разработки ECMAScript 4 (2004). Это название, стандартизированное в стандарте ECMA-357, расшифровывается, как ECMAScript for XML. E4X добавило в ECMAScript поддержку и отображение XML-содержимого. В E4X XML рассматривается как примитивный тип данных. Поначалу E4X получил поддержку крупных движков, таких, как SpiderMonkey, но затем был заброшен по причине низкой популярности и убран из 21 версии Firefox.
Кроме цифры 4 в названии, у E4X нет абcолютно ничего общего с ECMAScript 4.
Небольшой пример использования E4X:
Другие форматы данных, такие как JSON, пользовались значительно большей популярностью в сообществе JavaScript, поэтому E4X появился и исчез, не оставив практически никакого следа.
ECMAScript 5: перерождение JavaScript.
В 2008 году, после долгих боев, развернувшихся вокруг ECMAScript 4, сообщество сфокусировалось на работе над ECMAScript 3.1, отправив ECMAScript 4 на свалку. В 2009 году ECMAScript 3.1 был полностью завершён и одобрен всеми участниками комитета. Так как ECMAScript 4 считался своеобразным вариантом ECMAScript несмотря на отсутствие хоть какого-либо релиза, было решено переименовать ECMAScript 3.1 в ECMAScript 5, чтобы избежать недоразумений.
ECMAScript 5 стал одной из самых поддерживаемых версий JavaScript, став также целью компиляции многих транспайлеров. ECMAScript 5 получил полную поддержку в браузерах Firefox 4 (2011), Chrome 19 (2012), Safari 6 (2012), Opera 12.10 (2012) и Internet Explorer 10 (2012).
ECMAScript 5 был достаточно скромным улучшением ECMAScript 3, включавшим в себя:
- Геттеры/сеттеры
- Разделители-запятые в массивах и объектах
- Возможность использовать зарезервированные слова в качестве свойств объекта
- Новые методы объектов (create, defineProperty, keys, seal, freeze, getOwnPropertyNames и т.д.)
- Новые методы массивов (isArray, indexOf, every, some, map, filter, reduce и т.д.)
- String.prototype.trim и доступ к свойствам
- Новые методы Date (toISOString, now, toJSON)
- Привязывание функций
- JSON
- Неизменяемые глобальные объекты (undefined, NaN, Infinity)
- Строгий режим
- Другие небольшие изменения (parseInt игнорирует ведущие нули, функции в throw имеют значение и т.д.)
Ни одно из этих изменений не требовало внесения изменений в синтаксис. Геттеры и сеттеры в то время уже неофициально поддерживались некоторыми браузерами. Новые методы объектов должны были улучшить большое программирование, дав программистам больше инструментов для проверки соблюдения определённых инвариантов (Object.seal, Object.freeze, Object.createProperty). Строгий режим также стал мощным инструментом в этой области, позволив избежать большого числа ошибок. Дополнительные методы массивов улучшили определённые функциональные паттерны (map, reduce, filter, every, some. Ещё одним большим нововведением является JSON: формат данных, основанный на JavaScript, который теперь поддерживается нативно благодаря JSON.stringify и JSON.parse. Другие изменения касаются небольших улучшений, основанных на практическом опыте. В целом, ECMAScript 5 был небольшим улучшением, которое приукрасило JavaScript в плане юзабилити как для небольших скриптов, так и для более объемных проектов. Тем не менее, большое количество хороших идей, предлагавшихся для ECMAScript 4, так и не были реализованы и ждали своего возвращения в ECMAScript Harmony.
ECMAScript 5 получил обновление в 2011 году под названием ECMAScript 5.1. Этот релиз вносил ясность в некоторые неоднозначные пункты стандарта, но никаких новых возможностей в нем не было. Все новые возможности были запланированы для следующего большого релиза ECMAScript.
ECMAScript — ECMAScript
ECMAScript (или ES ) — язык программирования общего назначения, стандартизированный Ecma International в соответствии с документом ECMA-262. Это JavaScript стандарт, предназначенный для обеспечения взаимодействия веб-страниц в различных веб-браузерах. ECMAScript обычно используется для клиентских сценариев в World Wide Web, и он все чаще используется для написания серверных приложений и служб с использованием Node.js.
- 1 ECMAScript, ECMA-262 и JavaScript
- 2 История
- 2.1 Версии
- 2.2 4-е издание (заброшено)
- 2.3 5-е издание
- 2.4 6-е издание — ECMAScript 2015
- 2,5 7-е Издание — ECMAScript 2016
- 2.6 8-е издание — ECMAScript 2017
- 2.7 9-е издание — ECMAScript 2018
- 2.8 10-е издание — ECMAScript 2019
- 2.9 11-е издание — ECMAScript 2020
- 2.10 ES.Next
- 3.1 Императивная и структурированная
- 3.2 Слабо типизированная
- 3.3 Динамическая
- 3.4 Транспиляция
- 7.1 Стандарты ISO
- 7.2 Стандарты ECMA
ECMAScript, ECMA-262 и JavaScript
ECMAScript — это сам язык программирования, указанный в документе ECMA-262. Имена «JavaScript» и «ECMAScript» по сути являются разными именами для одного и того же.
ECMA-262 — это спецификация языка программирования ECMAScript.
История
Спецификация ECMAScript — это стандартизированная спецификация языка сценариев, разработанная Бренданом Эйхом из Netscape ; первоначально он назывался Mocha, позже LiveScript и, наконец, JavaScript. В декабре 1995 года Sun Microsystems и Netscape объявили о JavaScript в пресс-релизе. В ноябре 1996 года Netscape объявила о собрании организации по стандартизации Ecma International для продвижения стандартизации JavaScript. Первое издание стандарта ECMA-262 было принято Генеральной ассамблеей Ecma в июне 1997 года. С тех пор было опубликовано несколько редакций языкового стандарта. Название «ECMAScript» было компромиссом между организациями, занимающимися стандартизацией языка, особенно Netscape и Microsoft, чьи споры доминировали на ранних сессиях стандартизации. Эйх прокомментировал, что «ECMAScript всегда был нежелательной торговой маркой, которая звучит как кожное заболевание ». ECMAScript был формализован с помощью операционной семантики благодаря работе в Стэнфордском университете и на факультете вычислительной техники, Имперский колледж Лондона для анализа и стандартизации безопасности..
Хотя и JavaScript, и JScript нацелены на совместимость с ECMAScript, они также предоставляют дополнительные функции, не описанные в спецификациях ECMA.
Версии
Существует десять редакций ECMA -262 опубликовано. Работа над версией 10 стандарта была завершена в июне 2019 года.
История версий ECMAScript
Редакция Дата публикации Имя Изменения по сравнению с предыдущим изданием Редактор 1 июнь 1997 г. Первое издание Гай Л. Стил-младший 2 июнь 1998 г. Редакционные изменения для приведения спецификации в полное соответствие с международным стандартом ISO / IEC 16262 Майк Коулишоу 3 декабрь 1999 г. Добавлены регулярные выражения, улучшенная обработка строк, новые управляющие операторы, обработка исключений try / catch, более точное определение ошибок, форматирование для числового вывода и другие улучшения Майк Коулишоу 4 Заброшено (последний черновик 30 июня 2003 г.) Четвертое издание было заброшено из-за политических разногласий, касающихся языковой сложности. Многие функции, предложенные для четвертого издания, были полностью исключены; некоторые были включены в шестое издание. 5 Декабрь 2009 г. Добавляет «строгий режим», подмножество, предназначенное для обеспечения более тщательной проверки ошибок и предотвращения подверженных ошибкам конструкций. Разъясняет многие двусмысленности в спецификации 3-го издания и учитывает поведение реальных реализаций, которые постоянно отличались от этой спецификации. Добавлены некоторые новые функции, такие как методы получения и установки, поддержка библиотек для JSON и более полное отражение свойств объекта. Пратап Лакшман, Аллен Вирфс-Брок 5.1 Июнь 2011 г. Эта редакция 5.1 стандарта ECMAScript полностью соответствует третьему изданию международного стандарта ISO / IEC 16262: 2011. Пратап Лакшман, Аллен Вирфс-Брок 6 июнь 2015 ECMAScript 2015 (ES2015) См. 6-е издание — ECMAScript 2015 Аллен Вирфс- Брок 7 июнь 2016 г. ECMAScript 2016 (ES2016) См. 7-е издание — ECMAScript 2016 Брайан Терлсон 8 июнь 2017 г. ECMAScript 2017 (ES2017) См. 8-е издание — ECMAScript 2017 Брайан Терлсон 9 июнь 2018 г. ECMAScript 2018 (ES2018) См. 9-е Выпуск — ECMAScript 2018 Брайан Терлсон 10 июнь 2019 ECMAScript 2019 (ES2019) См. 10-е издание — ECMAScript 2019 Брайан Терлсон, Брэдли Фариас, Джордан Харбанд 11 июнь 2020 г. ECMAScript 2020 (ES2020) См. 11-е издание — ECMAScript 2020 Иордания Харбанд, Кевин Смит В июне 2004 года Ecma International опубликовала стандарт ECMA-357, определяющий расширение ECMAScript, известное как ECMAScript для XML (E4X). Ecma также определила «компактный профиль» для ECMAScript, известный как ES-CP или ECMA 327, который был разработан для устройств с ограниченными ресурсами, который был отозван в 2015 году.
4-е издание (заброшено)
Предлагаемое четвертое издание ECMA-262 (ECMAScript 4 или ES4 ) было бы первым крупным обновлением ECMAScript с момента публикации третьего издания в 1999 году. вместе с эталонной реализацией) изначально планировалось завершить к октябрю 2008 г. Первый проект был датирован февралем 1999 г. Обзор языка был выпущен рабочей группой 23 октября 2007 г.
К августу 2008 г. Предложение 4-го издания ECMAScript было преобразовано в проект под кодовым названием ECMAScript Harmony. Обсуждаемые в то время функции Harmony включали:
- классы,
- модульную систему,
- необязательные аннотации типов и статическую типизацию, возможно, с использованием структурного типа системные,
- генераторы и итераторы,
- деструктурирующие присваивание и
- алгебраические типы данных.
Эти функции частично предназначались для лучшей поддержки программирования в целом, и позволить частично пожертвовать способностью скрипта быть динамичным для повышения производительности. Например, Tamarin — виртуальная машина для ActionScript, разработанная Adobe с открытым исходным кодом — поддерживает своевременную компиляцию (JIT) для определенных классов скриптов.
Помимо введения новых функций, некоторые ошибки ES3 было предложено исправить в версии 4. Эти и другие исправления, а также поддержка кодирования / декодирования JSON были включены в ECMAScript., Спецификация 5-го издания.
Работа над версией 4 началась после завершения спецификации ES-CP (компактный профиль) и продолжалась примерно 18 месяцев, когда был достигнут медленный прогресс в уравновешивании теории спецификации Netscape JavaScript 2 с опыт внедрения Microsoft JScript.NET. Спустя некоторое время акцент сместился на стандарт ECMAScript for XML (E4X). Обновление не было бесспорным. В конце 2007 года дебаты между Эйхом, впоследствии техническим директором Mozilla Foundation, и архитектором платформы Microsoft для Internet Explorer, стали достоянием гласности. количество блогов. Уилсон предупредил, что, поскольку предложенные изменения в ECMAScript сделали его обратно несовместимым в некоторых отношениях с более ранними версиями языка, обновление составило «нарушение Интернета», а заинтересованные стороны, которые выступали против изменений, были «скрыты от просмотра». Эйх ответил, заявив, что Уилсон, похоже, «повторяет ложь в блогах», и отрицал попытки подавить инакомыслие и призвал критиков привести конкретные примеры несовместимости. Он отметил, что Microsoft Silverlight и Adobe AIR полагаются на C # и ActionScript 3 соответственно, оба из которых больше и сложнее, чем ECMAScript Edition 3.
5th Edition
Yahoo, Microsoft, Google и другие несогласные с четвертым изданием сформировали свой собственный подкомитет для разработки менее амбициозного обновления 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, 5-е издание) при полном сотрудничестве всех сторон, и поставщики нацелятся на как минимум две совместимые реализации к началу 2009 г. В апреле 2009 г. Ecma TC39 опубликовала «окончательный» проект 5-го издания и объявила о тестировании Ожидается, что внедрение совместимых программ будет завершено к середине июля. 3 декабря 2009 г. было опубликовано 5-е издание ECMA-262.
6-е издание — ECMAScript 2015
6-е издание, первоначально известное как ECMAScript 6 (ES6 ), затем, а затем переименованное в ECMAScript 2015, было завершено в июне 2015 года. Это обновление добавляет существенный новый синтаксис для написания сложных приложений, включая объявления классов ( class Foo <. >), модули ES6, такие как import * as moduleName из «. «; export const Foo , но определяет их семантически в тех же терминах, что и в строгом режиме ECMAScript 5. К другим новым функциям относятся итераторы и for. of циклы, генераторы стиля Python, выражение функции стрелки ( () => <. >), let ключевое слово для локальных объявлений, const ключевое слово для локальных объявлений констант, двоичных данных, типизированных массивов, новых коллекций (карт, наборов и WeakMap), promises, числовые и математические улучшения, отражение, прокси (метапрограммирование для виртуальных объектов и оболочек) и литералы шаблонов для строк. Полный список обширен. Как первая спецификация «ECMAScript Harmony», она также известна как «ES6 Harmony».
7-е издание — ECMAScript 2016
Седьмое издание, официально известное как ECMAScript 2016, было завершено в июне 2016 года. Его функции включают блочное определение переменных и функций, шаблоны деструктуризации (переменных), собственный хвост вызовы, оператор возведения в степень ** для чисел, await , async ключевые слова для асинхронного программирования и функция Array.prototype.includes .
Оператор возведения в степень эквивалентен Math.pow , но обеспечивает более простой синтаксис, аналогичный таким языкам, как Python, F #, Perl и Ruby. async / await был провозглашен более простым способом использования обещаний и разработки асинхронного кода.
8-е издание — ECMAScript 2017
Восьмое издание, официально известное как ECMAScript 2017, было завершено в июне 2017 года. Его функции включают Object.values , Object.entries и Object.getOwnPropertyDescriptors функции для удобного управления объектами, конструкции async / await , которые используют генераторы и обещания, а также дополнительные функции для параллелизма и атомики.
9-й Редакция — ECMAScript 2018
Девятая редакция, официально известная как ECMAScript 2018, была завершена в июне 2018 года. Новые функции включают операторы остановки / распространения для объектных литералов (три точки: . идентификатор ), асинхронная итерация, Promise.prototype.finally и дополнения к RegExp.
Оператор распространения позволяет легко копировать свойства объекта, как показано ниже.
let object = < a: 1, b: 2>let objectClone = Object.assign (<>, object) // до ES9 let objectClone = // синтаксис ES9 let otherObject = console.log (другой объект) // ->
10-е издание — ECMAScript 2019
10-е издание, официально известное как ECMAScript 2019, было опубликовано в июне 2019 г. Добавленные функции включают, но не ограничиваясь ими, Array.prototype.flat , Array.prototype.flatMap , изменяется на Array.sort и Object.fromEntries .
Array.sort теперь гарантированно стабилен, что означает, что элементы с одинаковым приоритетом сортировки будут отображаться в том же порядке в отсортированном массиве. Array.prototype.flat (depth = 1) выравнивает массив до указанной глубины, что означает, что все элементы подмассива (до указанной глубины) рекурсивно объединяются.
11-е издание — ECMAScript 2020
11-е издание, официально известное как ECMAScript 2020, было опубликовано в июне 2020 года. Помимо новых функций, эта версия включает примитив BigInt для произвольных -размерные целые числа, новый синтаксис объединения null и имя, которое всегда ссылается на глобальный объект .
BigInts создаются либо с помощью конструктора BigInt , либо с синтаксисом 10n , где «n» ставится после числового литерала. Числа в ECMAScript обычно представляют собой 64-битные числа с плавающей запятой, поэтому BigInts позволяют представление и манипулирование целыми числами за пределами Number.MAX_SAFE_INTEGER . Встроенные функции в Math несовместимы с BigInts; например, возведение в степень BigInts должно выполняться с помощью оператора ** вместо Math.pow .
. Синтаксис объединения null ?? позволяет кратко справиться с нулевые значения. В следующем примере правая часть выбирается только тогда, когда левая часть не определена или равна нулю. Это контрастирует с оператором || , который возвращал бы «строку» для всех примеров.
false ?? "строка" // ->ложь NaN ?? "строка" // ->NaN undefined ?? "строка" // ->"строка"
Необязательное объединение в цепочку позволяет вам получить доступ к вложенным узлам в объекте без проверки И на каждом уровне. Чтобы получить почтовый индекс из объекта const person = >. Синтаксис: const zipcode = person?.Address?.Zipcode . Если какой-либо из узлов отсутствует, zipcode будет undefined .
ES.Next
ES.Next — динамическое имя, которое относится к тому, что следующая версия находится в время написания. Функции ES.Next — это готовые предложения (также известные как «предложения стадии 4»), перечисленные в готовом предложении, которые не являются частью утвержденной спецификации. Языковой комитет следует модели «живой спецификации», поэтому эти изменения являются частью стандарта, а ратификация — формальностью.
Особенности
Императивный и структурированный
ECMAScript JavaScript поддерживает C стиль структурированного программирования. Однако существуют некоторые различия между реализациями области видимости на обоих языках. До ECMAScript 2015 JavaScript поддерживал только область видимости функции с использованием ключевого слова var . В ECMAScript 2015 добавлены ключевые слова let и const , позволяющие JavaScript поддерживать как область видимости блока, так и область видимости функции. JavaScript поддерживает автоматическую вставку точки с запятой, что означает, что точки с запятой, которые обычно используются для завершения оператора в C, могут быть опущены в JavaScript.
Как и языки C-стиля, поток управления выполняется с помощью while , для операторов , do / while , if / else и switch . Функции слабо типизированы и могут принимать и возвращать любой тип. Аргументы не предоставлены по умолчанию: undefined .
Слабо типизированный
ECMAScript — слабо типизированный. Это означает, что определенные типы присваиваются неявно в зависимости от выполняемой операции. Однако в реализации JavaScript преобразования переменной из одного типа в другой есть несколько причуд. Эти причуды вызвали критику со стороны многих разработчиков.
Dynamic
ECMAScript динамически типизирован. Таким образом, тип связан со значением, а не выражением. ECMAScript поддерживает различные способы проверки типов объектов, включая утиный ввод.
Транспилирование
Начиная с ES 2015, транспиляция JavaScript стала очень распространенной. Транспиляция — это компиляция из исходного кода в исходный, при которой в исходном коде пользователя используются новые версии JavaScript, а транспилятор переписывает их так, чтобы они соответствовали текущей спецификации. Обычно транспилеры переходят на ES3, чтобы поддерживать совместимость со всеми версиями браузеров. При необходимости можно настроить параметры транспиляции для конкретной версии. Транспилирование добавляет дополнительный шаг к процессу сборки и иногда выполняется, чтобы избежать необходимости полифиллов. Полифиллы позволяют использовать функциональные возможности новых версий ECMA в более старых средах, в которых они отсутствуют. Полифиллы делают это во время выполнения в интерпретаторе, таком как браузер пользователя или на сервере. Вместо этого транспиляция перезаписывает сам код ECMA на этапе сборки разработки, прежде чем он попадет в интерпретатор.
Соответствие
В 2010 году Ecma International начала разработку стандартного теста для Ecma 262 ECMAScript. Test262 — это набор тестов на соответствие ECMAScript, который можно использовать для проверки того, насколько точно реализация JavaScript соответствует спецификации ECMAScript 5th Edition. Набор тестов содержит тысячи отдельных тестов, каждый из которых проверяет определенные требования спецификации ECMAScript. Разработка Test262 является проектом Технического комитета Ecma 39 (TC39). Структура тестирования и отдельные тесты созданы организациями-членами TC39 и переданы в Ecma для использования в Test262.
Важный вклад внесли Google (набор тестов Sputnik) и Microsoft, которые внесли тысячи тестов. По состоянию на январь 2020 года набор тестов Test262 состоял из 38014 тестов. Спецификации ECMAScript через ES7 хорошо поддерживаются в основных веб-браузерах. В таблице ниже показан уровень соответствия для текущих версий программного обеспечения по отношению к самым последним выпускам ECMAScript.
Соответствие механизма сценариев
Механизм сценариев Эталонные приложения Соответствие ES5 ES6 (2015) ES7 (2016) Новее (2017+) Чакра Microsoft Edge 18 100% 96% 100 % 33% SpiderMonkey Firefox 79 100% 98% 100% 100% V8 Google Chrome 84, Microsoft Edge 84, Opera 70 100% 98% 100% 87% JavaScriptCore Safari 13,1 99% 99% 100% 79% См. Также
- Сравнение механизмов компоновки (ECMAScript)
- ECMAScript для XML (E4X)
- JavaScript
- JScript
- Список механизмов ECMAScript
Ссылки
Внешние ссылки
Стандарты ISO
стандарты 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