ECMAScript ( / ˈ ɛ k m ə s k r ɪ p t / ; ES ) [1] — стандарт для языков сценариев, включая JavaScript , JScript и ActionScript . Он наиболее известен как стандарт JavaScript, предназначенный для обеспечения взаимодействия веб -страниц в различных веб-браузерах . [2] Он стандартизирован Ecma International в документе ECMA-262.
ECMAScript обычно используется для клиентских скриптов во Всемирной паутине , и все чаще его используют для серверных приложений и служб, использующих среды выполнения - Node.js , [3] deno [4] и bun . [5]
ECMA-262 , или спецификация языка ECMAScript , определяет язык ECMAScript , или просто ECMAScript . [6] ECMA-262 определяет только синтаксис языка и семантику основного интерфейса прикладного программирования ( API ), такого как Array , Function и globalThis , в то время как допустимые реализации JavaScript добавляют свои собственные функции, такие как ввод/вывод и обработка файловой системы .
Спецификация ECMAScript — это стандартизированная спецификация языка сценариев, разработанная Бренданом Эйхом из Netscape ; изначально он назывался Mocha, затем LiveScript и, наконец, JavaScript. [7] В декабре 1995 года Sun Microsystems и Netscape анонсировали JavaScript в пресс-релизе. [8] В ноябре 1996 года Netscape объявила о проведении встречи Международной организации по стандартам Ecma для продвижения стандартизации JavaScript. [9] Первое издание ECMA-262 было принято Генеральной ассамблеей Ecma в июне 1997 года. С тех пор было опубликовано несколько изданий стандарта языка. Название «ECMAScript» было компромиссом между организациями, занимающимися стандартизацией языка, особенно Netscape и Microsoft, чьи споры доминировали на ранних сессиях по стандартам. Эйх прокомментировал, что «ECMAScript всегда был нежелательным торговым названием, которое звучит как кожное заболевание ». [10] ECMAScript был формализован с помощью операционной семантики в ходе работы в Стэнфордском университете и на кафедре вычислительной техники Имперского колледжа Лондона для анализа безопасности и стандартизации. [11] До 1994 года «ECMA» расшифровывалось как «Европейская ассоциация производителей компьютеров».
Технический комитет 39 (TC39) Ecma отвечает за поддержку ECMAScript. [12] Новые предложения по языку проходят поэтапный процесс, при этом каждый этап представляет собой полноту спецификации предложения. Для продвижения предложения на следующий этап необходимо достичь консенсуса в комитете. Предложения, достигшие этапа 4, финального этапа, будут включены в следующую версию стандарта. [13] С момента выпуска версии 6 в июне 2015 года новые основные версии были завершены и опубликованы каждый июнь. [14]
Язык ECMAScript включает структурированные , динамические , функциональные и основанные на прототипах функции. [15]
ECMAScript JavaScript поддерживает структурное программирование в стиле C. Ранее JavaScript поддерживал только область действия функций с помощью ключевого слова var
, но ECMAScript 2015 добавил ключевые слова let
и const
, что позволило JavaScript поддерживать как область действия блоков, так и область действия функций. JavaScript поддерживает автоматическую вставку точек с запятой , что означает, что точки с запятой, которые обычно завершают оператор в C, могут быть опущены в JavaScript. [16]
Как и в языках в стиле C, поток управления осуществляется с помощью операторов while
, for
, do
/ while
, if
/ else
и switch
. Функции слабо типизированы и могут принимать и возвращать любой тип. Аргументы, не указанные в параметрах, по умолчанию равны undefined
.
ECMAScript слабо типизирован . Это означает, что определенные типы назначаются неявно на основе выполняемой операции. Однако в реализации JavaScript преобразования переменной из одного типа в другой есть несколько странностей. Эти странности стали предметом обсуждения в докладе под названием Wat . [17] [18]
ECMAScript динамически типизирован. Таким образом, тип ассоциируется со значением, а не выражением. ECMAScript поддерживает различные способы проверки типа объектов, включая утиную типизацию . [19]
Начиная с ES 2015, транспиляция JavaScript стала очень распространенной. Транспиляция — это компиляция исходного кода , в которой используются более новые версии JavaScript, а транспилятор переписывает исходный код так, чтобы он поддерживался старыми браузерами. Обычно транспиляторы транспилируют в ES3 для поддержания совместимости со всеми версиями браузеров. Параметры транспиляции в конкретную версию можно настроить в соответствии с необходимостью. Транспиляция добавляет дополнительный шаг к процессу сборки и иногда выполняется, чтобы избежать необходимости в полифиллах . Полифиллы создают новые функции для старых сред, в которых их нет. Полифиллы делают это во время выполнения в интерпретаторе, например, в браузере пользователя или на сервере. Вместо этого транспиляция переписывает сам код ECMA во время фазы сборки разработки, прежде чем он достигнет интерпретатора.
В 2010 году Ecma International начала разрабатывать стандартный тест для Ecma 262 ECMAScript. [20] Test262 — это набор тестов соответствия ECMAScript, который можно использовать для проверки того, насколько точно реализация JavaScript следует спецификации ECMAScript. Набор тестов содержит тысячи отдельных тестов, каждый из которых проверяет некоторые конкретные требования спецификации ECMAScript. Разработка Test262 — это проект Технического комитета Ecma 39 (TC39). Тестовая структура и отдельные тесты предоставлены Ecma организациями-членами TC39.
Важный вклад внесли Google ( тестовый набор Sputnik ) и Microsoft, которые оба внесли тысячи тестов. Тестовый набор Test262 состоял из38 014 тестов по состоянию на январь 2020 года [обновлять]. [21] Спецификации ECMAScript через ES7 хорошо поддерживаются в основных веб-браузерах . В таблице ниже показан уровень соответствия текущих версий программного обеспечения по отношению к последним редакциям ECMAScript.
Основной язык программирования JavaScript [...] основан на стандарте ECMAScript , или сокращенно ES.