ECMAScript

редактировать
Официальная спецификация, на которой основан JavaScript и другие языки
ECMAScript
Парадигма Мультипарадигма : на основе прототипа, функциональный, императивный
Разработан Бренданом Эйхом, 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, Схема
ECMAScript
Crystal source.png
Расширения имени файла .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.

Содержание

  • 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 Особенности
    • 3.1 Императивная и структурированная
    • 3.2 Слабо типизированная
    • 3.3 Динамическая
    • 3.4 Транспиляция
  • 4 Соответствие
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
    • 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июнь 2015ECMAScript 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июнь 2019ECMAScript 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 = {... object} // синтаксис ES9 let otherObject = {c: 3,... object} console.log (другой объект) // ->{c: 3, a: 1, b: 2}

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 = {address: {zipcode: 12345}}. Синтаксис: const zipcode = person?.Address?.Zipcode. Если какой-либо из узлов отсутствует, zipcodeбудет undefined.

ES.Next

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 преобразования переменной из одного типа в другой есть несколько причуд. Эти причуды вызвали критику со стороны многих разработчиков.

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.

Соответствие механизма сценариев
Механизм сценариевЭталонные приложенияСоответствие
ES5ES6 (2015)ES7 (2016)Новее (2017+)
Чакра Microsoft Edge 18100%96%100 %33%
SpiderMonkey Firefox 79100%98%100%100%
V8 Google Chrome 84, Microsoft Edge 84, Opera 70100%98%100%87%
JavaScriptCore Safari 13,199%99%100%79%

См. Также

Ссылки

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

Стандарты ISO

стандарты ECMA

Последняя правка сделана 2021-05-18 14:16:19
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте