В чем разница между JavaScript и ECMAScript?

462

В чем разница между ECMAScript и JavaScript? Из того, что я понял, ECMAScript - это стандарт, а JavaScript - это реализация. Это правильно?

парень
источник

Ответы:

183

ECMAScript - это язык, тогда как JavaScript, JScript и даже ActionScript 3 называются «диалектами». Википедия проливает свет на это.

Райан Флоренс
источник
9
то, что было бы действительно хорошо, - это четкое отображение между версиями JavaScript и ECMAScript, например, ES5 соответствует JS1.5 и т. д. Я нашел это: en.wikipedia.org/wiki/JavaScript#Versions
Сэм Джозеф,
2
@Sam - обновление ссылки Сэма: en.wikipedia.org/wiki/JavaScript#Version_history
Rop
65
Янг Ли проголосовал за и против, так как этот ответ говорит очень мало и в основном указывает на Википедию. Ответ Ян Ли гораздо более подробный и полезный. Кроме того, является ли язык / стандарт и другой диалект, или реализация и т. Д. Открытым мнением, а не фактом из того, что я понимаю. В то время как этот ответ создает впечатление, что это факт. Поправь меня, если я ошибаюсь. На самом деле, я бы сказал, что предложение по этому ответу даже не является общепринятым. Как большинство видит ECMAScript имеет стандарт и JavaScript в качестве языка.
redfox05
1
@Rop - Обновление по этой ссылке: en.wikipedia.org/wiki/ECMAScript#Version_correspondence
HDave
5
Я не согласен. ECMAScript - это спецификация. JS, JScript, ActionScript - это языки, которые реализуют такую ​​спецификацию.
Adripanico
611

Я думаю, что небольшой урок истории должен.

Изначально JavaScript назывался Mocha и изменился на Livescript, но в конечном итоге стал JavaScript.

Важно отметить, что JavaScript предшествовал ECMAscript, и история покажет вам, почему.

С самого начала JavaScript получил свое название от Java, и первоначально Брендану Эйчу (создателю JS) было предложено разработать язык, похожий на Java для Интернета, для Netscape.

Однако Айх решил, что Java слишком сложен со всеми ее правилами, и поэтому намеревался создать более простой язык, который мог бы кодировать даже новичок. Это проявляется в таких вещах, как ослабление необходимости использовать точку с запятой.

После того, как язык был закончен, маркетинговая команда Netscape попросила Sun разрешить им назвать его JavaScript как маркетинговый ход и, следовательно, почему большинство людей, которые никогда не использовали JavaScript, считают, что это связано с Java.

Примерно через год или два после выпуска JavaScript в браузере, IE Microsoft взял язык и начал создавать свои собственные реализации, такие как JScript. В то же время IE доминировал на рынке и вскоре после того, как Netscape пришлось закрыть свой проект.

Прежде чем Netscape отказался от этого, они решили запустить стандарт, который будет направлять путь JavaScript, под названием ECMAScript.

У ECMAScript было несколько выпусков, и в 1999 году они выпустили свою последнюю версию (ECMAScript 3) перед тем, как перейти в спящий режим в течение следующих 10 лет. В течение этих 10 лет Microsoft доминировала над сценами, но в то же время они не улучшали свой продукт, и, следовательно, родился Firefox (во главе с Eich) и целая куча других браузеров, таких как Chrome, Opera.

ECMAScript выпустил 5-е издание в 2009 году (4-е издание было отменено) с такими функциями, как строгий режим. С тех пор ECMAScript набирает обороты и планирует выпустить свое 6-е издание через несколько месяцев с самыми большими изменениями, которые были до сих пор.

Вы можете использовать список функций для ECMAScript 6 здесь http://kangax.github.io/es5-compat-table/es6/, а также поддержку браузера. Вы даже можете начать писать Ecmascript 6, как вы делаете это с CoffeeScript, и использовать компилятор для компиляции до Ecmascript 5.

Если ECMAScript язык и JavaScript является диалектом спорно, но не важно. Если вы продолжите так думать, это может сбить вас с толку. Там нет компилятора, который бы запускал ECMAScript, и я считаю, что JavaScript считается языком, который реализует стандарт под названием ECMAScript.

Есть также другие заметные языки, которые реализуют ECMAScript, такие как ActionScript (используется для Flash)

Ян Ли
источник
1
Для тех, кто заинтересован в том, как скомпилировать / перенести новый стандарт ES2015 в код ECMAScript 5, вы можете проверить Babel (ранее 6to5), доступный по адресу babeljs.io или traceur по адресу github.com/google/traceur-compiler . С этими инструментами нет никаких причин, по которым вы не можете начать писать «новый JavaScript» прямо сейчас, и воспользоваться всеми последними дополнениями к языку.
LWurm
1
Я не знал, что Lua реализует ECMAScript. Я не могу найти ничего, что подтверждает это. Каков твой источник?
battmanz
2
@YangLi Согласны ли вы с ответом Джерона ниже, что языки ECMAScript не включают DOM API, который мы все используем при написании чистого JavaScript?
theJollySin
11
@theJollySin Да, он прав. ECMAScript не был разработан специально для браузера, поэтому такие методы, как document.getElementById и другие DOM API, не являются частью стандарта. Они принадлежат стандартам WHATWG, наряду с некоторыми другими специфическими для браузера методами, такими как localStorage и т. Д. Если вы берете узел и не используете какие-либо импортированные модули, то у вас есть API только для ECMAScript.
Ян Ли
1
Как несколько языков могут реализовывать один и тот же стандарт и не быть одним и тем же языком? Стандарт определяет язык. Если какой-то язык реализует стандарт C ++, он называется C ++, а не чем-то другим (именно потому , что он реализует этот стандарт). Так что у меня все тот же вопрос ... в чем разница?
Neme
157

ECMAScript = ES:

  • ECMAScript - это стандарт для языков сценариев.

  • Такие языки, как Javascript, основаны на стандарте ECMAScript.

  • Стандарт ECMA основан на нескольких исходных технологиях, наиболее известными из которых являются JavaScript (Netscape) и JScript (Microsoft).

  • ECMA означает Европейскую ассоциацию производителей компьютеров

JavaScript = JS:

  • JavaScript является наиболее популярной реализацией стандарта ECMAScript.

  • Основные функции Javascript основаны на стандарте ECMAScript, но Javascript также имеет другие дополнительные функции, которых нет в спецификации / стандарте ECMA.

  • ActionScript и JScript - другие языки, которые реализуют ECMAScript.

  • JavaScript был отправлен в ECMA для стандартизации, но из-за проблем с товарным знаком с именем Javascript стандарт стал называться ECMAScript.

  • У каждого браузера есть интерпретатор JavaScript.

ES5 = ECMAScript 5:

  • ES5 - это версия ECMAScript (старая / текущая).

  • ES5 - это JavaScript, который вы знаете и используете в браузере сегодня.

  • ES5 не требует шага сборки (транспортеров), чтобы превратить его во что-то, что будет работать в современных браузерах.

  • Версия 5 ECMAScript была закончена в декабре 2009 года, последние версии всех основных браузеров (Chrome, Safari, Firefox и IE) реализовали версию 5.

  • Версия 5.1 была закончена в июне 2011 года.

ES6 = ECMAScript 6 = ES2015 = ECMAScript 2015:

  • ES2015 - это версия ECMAScript (новая / будущая).

  • Официально название ES2015 следует использовать вместо ES6.

  • ES6 устранит многие недостатки основного языка, устраненные в TypeScript и CoffeeScript.

  • ES6 - это следующая итерация JavaScript, но она не работает в современных браузерах.

  • Существует немало транспортеров, которые экспортируют ES5 для работы в браузерах.

BabelJS:

  • BabelJS - самый популярный транспортер, преобразующий новый JavaScript ES6 в старый JavaScript ES5.

  • BabelJS делает возможным написание следующего поколения JavaScript сегодня (означает ES2015).

  • BabelJS просто берет файл ES2015 и преобразует его в файл ES5.

  • Текущие версии браузеров теперь могут понимать новый код JavaScript (ES2015), даже если они еще не поддерживают его.

TypeScript и CoffeeScript:

  • Оба предоставляют синтаксический сахар поверх ES5, а затем преобразуются в совместимый с ES5 JavaScript. 

  • Вы пишете TypeScript или CoffeeScript, после чего транспортер превращает его в ES5 JavaScript.

Махмуд Зальт
источник
3
« Javascript также имеет другие дополнительные функции, которых нет в спецификации / стандарте ECMA ». Не могли бы вы привести некоторые примеры этих функций?
Аруна Герат
1
« JavaScript является наиболее популярной реализацией стандарта ECMAScript. » Тогда где я могу найти источник этой реализации под названием «JavaScript»?
bzeaman
7
Своим вопросом я пытаюсь указать на потенциальную неправильность в формулировке ответа. Слово «реализация» используется. Говорят, что JavaScript - «самая популярная реализация ». Реализация - это « реализация технической спецификации». Что переводится в программное обеспечение . Итак, мне интересно, где это программное обеспечение под названием «JavaScript».
bzeaman
4
@Corrodias Я бы согласился, что это похоже на придирки, но я думаю, что это разумно сделать, когда ответ касается определения вещей. JavaScript - это язык, в настоящее время стандартизированный ECMAscript, сравнимый с тем, как C является языком, который стандартизирован стандартами ISO. Тогда термин для JavaScript будет просто «язык», не более того.
bzeaman
4
Резюме ES5, ES2015 и BabelJS действительно очищают эфир от многих недоразумений, которые могут возникнуть, когда он попадает в современный мир сценариев JS из программирования на стороне сервера. Отличный ответ. +1
RBT
45

JavaScript = ECMAScript + DOM + BOM ;

  • Спецификация языка ECMAScript® определяет всю логику для создания и редактирования объектов, массивов, чисел и т. Д.

  • DOM ( D ocument O bject M odel ) позволяет общаться с документами HTML / XML (например document.getElementById('id');).

  • BOM ( B rowser O bject M odel ) - это иерархия объектов браузера (например, объект местоположения, объект истории, элементы формы).

История именования JavaScript:

Мокко ► LiveScript ► JavaScript ► (часть JS привела к) ECMA-262 ► ECMAScript ► JavaScript (состоит из ECMAScript + DOM + BOM)

jerone
источник
7
Так что в node.js не JavaScript? Потому что у него нет DOM API.
Аруна Херат
4
Это правильно. «Node.js построен на современных версиях V8». & "V8 реализует ECMAScript, как указано в ECMA-262, 5-е издание ..." & "Однако DOM, как правило, предоставляется не механизмом JavaScript, а браузером. То же самое относится и к V8 - Google Chrome предоставляет DOM «. (Источник: nodejs.org/en/docs/es6 & github.com/v8/v8/wiki/Introduction )
Джерон
7
@jerone Какую версию ECMAScript я использую, когда пишу код JavaScript? Это зависит от браузера или библиотеки?
TheJollySin
4
Можете ли вы дать ссылку на JavaScript = ECMAScript + DOM API;?
Корай Тугай
2
@ koray-tugay Кроме этого, не так много документации о том, что такое JavaScript. Наверное, поэтому этот вопрос так популярен. «Формула» JavaScript = ECMAScript + DOM API;просто основана на общих согласованных документированных терминах, из которых состоит JavaScript.
Джерон
42

Технически ECMAScript - это язык, который каждый использует и внедряет - это спецификация, созданная много лет назад, когда Netscape и Microsoft сели и попытались стандартизировать сценарии между JavaScript (язык сценариев Netscape) и JScript (Microsoft).

Впоследствии все эти движки якобы реализуют ECMAScript, однако JavaScript (имя) теперь используется как по причинам традиционного именования, так и в качестве маркетингового термина Mozilla для их различных нестандартных расширений (которые они хотят иметь на самом деле «версия»). )

olliej
источник
12
Netscape и Microsoft на самом деле ладили один раз ?!
Коул Джонсон
2
Я думал, что Брэндон хотел сделать JS стандартом до Microsoft, и единственное, что он смог найти, это ECMA.
Джо Симмонс
30

Что такое ECMAScript, т.е. ES?

ECMAScript - это стандарт языка сценариев, а язык Javascript основан на стандарте ECMAScript.

Является ли Javascript точно таким же, как ECMAScript?

  • Нет, Javascript не совсем эквивалентен ECMAScript.
  • Основные функции Javascript основаны на стандарте ECMAScript, но Javascript также имеет другие дополнительные функции, которых нет в спецификации / стандарте ECMA.

JavaScript = ECMAScript + DOM API;

DOM API вроде: document.getElementById('id');

Используют ли другие языки стандарт ECMAScript?

  • Да, есть языки, отличные от JavaScript, которые также используют стандарт ECMAScript в качестве своего ядра.
  • ActionScript (используется Adobe Flash) и JScript (используется Microsoft) - оба языка, которые реализуют стандарт ECMAScript.

Почему он называется ECMAScript?

  • Javascript был изначально создан в Netscape, и они хотели стандартизировать язык. Таким образом, они представили язык на E uropean C omputer M anufacturer - х A ssociation (ECMA) по стандартизации.
  • Но возникли проблемы с товарными знаками с именем Javascript, и стандарт стал называться ECMAScript, что также является названием, которое он имеет и сегодня.
  • Из-за проблем с товарными знаками версия языка Microsoft называется JScript, хотя по своей сути JScript является тем же языком, что и Javascript.
Имран Ахмад
источник
Есть курсы по простой JS и ES6 JS. Какой из них мы должны взять? Используется ли ES6 больше в профессиональных настройках? Спасибо.
MasterJoe2
16

Различные версии JavaScript являются реализациями стандарта ECMAScript.

canen
источник
11

я знаю, что это старый пост, но, надеюсь, это кому-нибудь поможет.

В 1990-х годах стали появляться разные версии js, такие как javascript от netscape, Js-скрипт от Microsoft. Таким образом, ecmascript был введен в качестве стандарта. Но ecmascript формирует только часть javascript, которая определяет его основной синтаксис, типы, объекты и т. Д. Возможно, это объясняет несовместимые реализации javascript в diff. браузеры

Ссылка - Wrox (профессиональный Javascript для веб-разработчиков)

depz123
источник
10

В моем понимании ECMAScript - это «Теория» или «Спецификация», а Javascript - «Практика» или «Реализация».

Rethna
источник
10

JavaScript - это язык ECMAScript.

ECMAScript не обязательно JavaScript.

ryansstack
источник
7

Существующие ответы перефразируют основной вопрос довольно хорошо.

Суть в том, что ECMAScript - это чистый абстрактный язык, без каких-либо доменных расширений, он сам по себе бесполезен. Спецификация определяет только язык и ядро объекты этого.

В то время как JavaScript, ActionScript и другие диалекты добавляют библиотеку, относящуюся к домену, вы можете использовать ее для чего-то значимого.

Существует много движков ECMAScript , некоторые из них с открытым исходным кодом, другие являются проприетарными. Вы можете связать их в своей программе, а затем добавить свои собственные функции в глобальный объект, чтобы ваша программа стала доступной для сценариев. Хотя чаще всего они используются в браузерах.

Calmarius
источник
5

Javascript был оригинальным названием, предназначенным для извлечения выгоды из популярности Java. ECMA является органом по стандартизации, который наблюдает за стандартом, который в конечном итоге был введен в действие, поэтому названия примерно эквивалентны.

Реализации имеют другие имена, такие как V8 или Rhino и т. Д.

Джереми Хуискамп
источник
3

ECMAScript - это стандарт для JavaScrip t, посмотрите на эти утверждения из MDN :

введите описание изображения здесь

JavaScript

JavaScript (JS) - это легкий интерпретируемый или JIT-скомпилированный язык программирования с первоклассными функциями. Несмотря на то, что он наиболее известен как язык сценариев для веб-страниц, его также используют многие не браузерные среды, такие как node.js, Apache CouchDB и Adobe Acrobat. JavaScript - это основанный на прототипах мультипарадигмальный динамический язык, поддерживающий объектно-ориентированные, императивные и декларативные стили (например, функциональное программирование). Узнайте больше о JavaScript.


ECMAScript

Стандарт для JavaScript - ECMAScript . Начиная с 2012 года все современные браузеры полностью поддерживают ECMAScript 5.1. Старые браузеры поддерживают по крайней мере ECMAScript 3. 17 июня 2015 года ECMA International опубликовала шестую основную версию ECMAScript, которая официально называется ECMAScript 2015 и первоначально называлась ECMAScript 6 или ES6. С тех пор стандарты ECMAScript находятся на ежегодных циклах выпуска. Эта документация относится к последней версии проекта, которая в настоящее время ECMAScript 2018.

Для получения дополнительной информации посетите здесь

Алиреза
источник
3

Вот мои выводы:

JavaScript: Полное руководство , написанное Дэвидом Фланаганом, дает очень краткое объяснение:

JavaScript был создан в Netscape в первые дни существования Интернета, и технически «JavaScript» является торговой маркой, лицензированной у Sun Microsystems (теперь Oracle), используемой для описания реализации языка Netscape (теперь Mozilla). Netscape представил язык для стандартизации в ECMA, и из-за проблем с товарными знаками стандартизированная версия языка застряла с неловким названием «ECMAScript». По тем же причинам, связанным с товарными знаками, версия языка Microsoft формально известна как «JScript». На практике почти все называют язык JavaScript.

Сообщение в блоге от Microsoft , кажется, согласны с тем, что объясняет Фланаган, говоря ..

ECMAScript - это официальное название языка JavaScript, который мы все знаем и любим.

... что заставляет меня думать, что все вхождения JavaScriptв этом справочном посте (опять же от Microsoft) должны быть заменены на ECMASCript. На самом деле они, кажется, осторожны с использованием ECMAScriptтолько на этой , более новой и более технической странице документации.

w3schools.com, похоже, согласен с приведенными выше определениями:

JavaScript был изобретен Бренданом Айчем в 1995 году и стал стандартом ECMA в 1997 году. ECMA-262 является официальным названием стандарта. ECMAScript - это официальное название языка.

Ключ здесь: официальное название языка .

Если вы посмотрите страницы JavaScript-версии Mozilla , вы увидите следующее утверждение:

Устаревшее. Явное управление версиями и поддержка языковых функций были специфичны для Mozilla и находятся в процессе удаления. Firefox 4 был последней версией, которая ссылалась на версию JavaScript (1.8.5). С новыми стандартами ECMA функции языка JavaScript теперь часто упоминаются с их первоначальным определением в выпусках ECMA-262, таких как ECMAScript 2015.

и когда вы увидите последние заметки о выпуске, вы всегда увидите ссылку на стандарты ECMAScript, такие как:

  • Свойство ES2015 Symbol.toStringTag было реализовано (ошибка 1114580).

  • Реализованы методы ES2015 TypedArray.prototype.toString () и TypedArray.prototype.toLocaleString () (ошибка 1121938).

В Mozilla Web Docs также есть страница, которая объясняет разницу между ECMAScript и JavaScript:

Однако общий термин «JavaScript», понимаемый в контексте веб-браузера, содержит несколько очень разных элементов. Один из них - основной язык (ECMAScript), другой - набор веб-API, включая DOM (объектную модель документа).

Вывод

Насколько я понимаю, люди используют слово JavaScript несколько свободно, чтобы ссылаться на основную спецификацию ECMAScript.

Я бы сказал, что все современные реализации JavaScript (или движки JavaScript) на самом деле являются реализациями ECMAScript. Проверьте определение V8 Engine от Google, например:

V8 - это высокопроизводительный движок JavaScript с открытым исходным кодом от Google, написанный на C ++ и используемый в Google Chrome, браузере с открытым исходным кодом от Google, а также в Node.js и других. Он реализует ECMAScript, как указано в ECMA-262.

Кажется, они взаимозаменяемо используют слова JavaScript и ECMAScript, и я бы сказал, что это на самом деле движок ECMAScript?

Поэтому большинство JavaScript-движков фактически реализуют стандарт ECMAScript, но вместо того, чтобы называть их движками ECMAScript, они называют себя JavaScript-движками. Этот ответ также поддерживает то, как я вижу ситуацию.

Корай Тугай
источник
2

Я сомневаюсь, что мы когда-либо будем использовать слово «ECMAScript», если бы не тот факт, что имя «JavaScript» принадлежит Sun. Для всех намерений и целей язык является JavaScript. Вы не ходите в книжный магазин в поисках книг на ECMAScript?

Слишком просто сказать, что «JavaScript» - это реализация. JScript - это реализация Microsoft.

Nosredna
источник
1
У меня нет проблем со словом ECMAscript ... Вы когда-нибудь думали, что странно говорить MPEG вместо видео?
ryansstack
7
Ха - ха. Разве это не Брендан Эйч сказал, что ECMAScript звучит как кожное заболевание? :-)
Носредна
7
Sun владеет словом Java, а не JavaScript.
Джеймс Р. Клэйтон
1
@ JamesR.Clayton JavaScript был создан в Netscape на заре Интернета, и технически «JavaScript» является торговой маркой, лицензированной у Sun Microsystems (сейчас Oracle), используемой для описания реализации языка Netscape (теперь Mozilla).
Корай Тугай
1

JavaScript - это одна из ветвей языков, сформированных вокруг стандарта ECMAScript. Я считаю, что ECMA - это Европейская ассоциация производителей компьютеров, а не то, что это действительно важно.

Не забывайте, что другим популярным языком, созданным на основе стандарта ECMA Script, является ActionScript, используемый в Adobe Flash / Flex.

JAL
источник