Парадигма | Мультипарадигма : на основе прототипа, функциональный, императивный |
---|---|
Разработан | Бренданом Эйхом, Ecma International |
Впервые появился | 1997; 23 года назад (1997) |
Дисциплина набора текста | слабая, динамическая |
Веб-сайт | www.ecma-international.org |
Major реализации | |
JavaScript, SpiderMonkey, V8, ActionScript, JScript, QtScript, InScript, Google Apps Script | |
Под влиянием | |
Self, HyperTalk, AWK, C, CoffeeScript, Perl, Python, Java, Схема |
Расширения имени файла | .es |
---|---|
Тип Интернет-носителя | application / ecmascript |
Разработано | Sun Microsystems,. Ecma International |
Первый выпуск | июнь 1997 г.; 23 года назад (1997-06) |
Последний выпуск | Edition 11. (июнь 2020; 4 месяца назад (2020-06)) |
Тип формата | Язык сценариев |
Веб-сайт | ECMA-262, ECMA-290,. ECMA-327, ECMA-357,. ECMA-402 |
ECMAScript (или ES ) - язык программирования общего назначения, стандартизированный Ecma International в соответствии с документом ECMA-262. Это JavaScript стандарт, предназначенный для обеспечения взаимодействия веб-страниц в различных веб-браузерах. ECMAScript обычно используется для клиентских сценариев в World Wide Web, и он все чаще используется для написания серверных приложений и служб с использованием Node.js.
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 года.
Редакция | Дата публикации | Имя | Изменения по сравнению с предыдущим изданием | Редактор |
---|---|---|---|---|
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 году.
Предлагаемое четвертое издание 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.
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 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».
Седьмое издание, официально известное как ECMAScript 2016, было завершено в июне 2016 года. Его функции включают блочное определение переменных и функций, шаблоны деструктуризации (переменных), собственный хвост вызовы, оператор возведения в степень **
для чисел, await
, async
ключевые слова для асинхронного программирования и функция Array.prototype.includes
.
Оператор возведения в степень эквивалентен Math.pow
, но обеспечивает более простой синтаксис, аналогичный таким языкам, как Python, F #, Perl и Ruby. async
/ await
был провозглашен более простым способом использования обещаний и разработки асинхронного кода.
Восьмое издание, официально известное как ECMAScript 2017, было завершено в июне 2017 года. Его функции включают Object.values
, Object.entries
и Object.getOwnPropertyDescriptors
функции для удобного управления объектами, конструкции async / await
, которые используют генераторы и обещания, а также дополнительные функции для параллелизма и атомики.
Девятая редакция, официально известная как ECMAScript 2018, была завершена в июне 2018 года. Новые функции включают операторы остановки / распространения для объектных литералов (три точки: ... идентификатор
), асинхронная итерация, Promise.prototype.finally
и дополнения к RegExp.
Оператор распространения позволяет легко копировать свойства объекта, как показано ниже.
let object = { a: 1, b: 2} let objectClone = Object.assign ({}, object) // до ES9 let objectClone = {... object} // синтаксис ES9 let otherObject = {c: 3,... object} console.log (другой объект) // ->{c: 3, a: 1, b: 2}
10-е издание, официально известное как ECMAScript 2019, было опубликовано в июне 2019 г. Добавленные функции включают, но не ограничиваясь ими, Array.prototype.flat
, Array.prototype.flatMap
, изменяется на Array.sort
и Object.fromEntries
.
Array.sort
теперь гарантированно стабилен, что означает, что элементы с одинаковым приоритетом сортировки будут отображаться в том же порядке в отсортированном массиве. Array.prototype.flat (depth = 1)
выравнивает массив до указанной глубины, что означает, что все элементы подмассива (до указанной глубины) рекурсивно объединяются.
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 = {address: {zipcode: 12345}
}. Синтаксис: const zipcode = person?.Address?.Zipcode
. Если какой-либо из узлов отсутствует, zipcode
будет undefined
.
ES.Next - динамическое имя, которое относится к тому, что следующая версия находится в время написания. Функции ES.Next - это готовые предложения (также известные как «предложения стадии 4»), перечисленные в готовом предложении, которые не являются частью утвержденной спецификации. Языковой комитет следует модели «живой спецификации», поэтому эти изменения являются частью стандарта, а ратификация - формальностью.
Язык ECMAScript включает структурированный, динамический, функциональный и на основе прототипа возможности.
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 преобразования переменной из одного типа в другой есть несколько причуд. Эти причуды вызвали критику со стороны многих разработчиков.
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% |