Яка різниця між JavaScript та ECMAScript?

Я спробував погуглити "різницю між JavaScript та ECMAScript".

Мені довелося пробиратися через море неоднозначних і, здавалося б, суперечливих результатів:

"ECMAScript - це стандарт".

"JavaScript - це стандарт".

"ECMAScript - це специфікація."

"JavaScript - це реалізація стандарту ECMAScript."

"ECMAScript - це стандартизований JavaScript."

"ECMAScript - це мова".

"JavaScript - це діалект ECMAScript."

"ECMAScript - це JavaScript."

Стримавши бажання плакати, я піднявся і вирішив взяти участь у деяких болючих, але продуктивних дослідженнях.

Ця стаття представляє моє сучасне розуміння відмінностей між JavaScript та ECMAScript. Він орієнтований на людей, які знайомі з JavaScript, але хочуть чіткішого розуміння його взаємозв’язку з ECMAScript, веб-браузерами, Babel тощо. Ви також ознайомитесь із мовами сценаріїв, движками JavaScript та середовищами виконання JavaScript.

Тож качайте.

Глосарій JavaScript / ECMAScript

Нижче наведено перелік визначень, розроблених з акцентом на послідовність та чіткість. Визначення не є повними на 100%. Вони побудовані таким чином, що забезпечують глибоке розуміння зв'язку та взаємозв'язку між JavaScript та ECMAScript.

Без зайвих сумнівів, давайте почнемо.

Ecma International

Організація, яка створює стандарти для технологій.

Щоб проілюструвати приклад “стандартної” (хоча не такої, створеної Ecma), подумайте про всі клавіатури, якими ви коли-небудь користувались. У переважної більшості були букви в однаковому порядку, а пробіл, клавіша Enter, клавіші зі стрілками з цифрами, що відображаються в рядку вгорі? Це пояснюється тим, що більшість виробників клавіатур засновують дизайн клавіатури на стандарті розкладки QWERTY.

ECMA-262

Це стандарт, опублікований Ecma International. Він містить специфікацію для мови сценаріїв загального призначення.

ECMA-262 є стандартом, як QWERTY, але замість того, щоб представляти специфікацію розкладки клавіатури, вона представляє специфікацію мови сценаріїв, яка називається ECMAScript.

Подумайте про ECMA-262 як про контрольний номер ECMAScript.

Мова сценаріїв

Мова програмування, розроблена спеціально для дії на існуючу сутність або систему

Для загального уявлення про те, що робить мову програмування мовою сценаріїв, розглянемо команди “walk”, “run” і “jump”. Ці дії вимагають чогось для їх здійснення, можливо, людини, собаки чи персонажа відеоігор. Без актора, який виконував би ці команди, «ходити», «бігати» та «стрибати» не мало б сенсу. Цей набір дій є аналогом мові сценаріїв, яка зосереджена на маніпулюванні зовнішнім об'єктом.

ECMAScript

Специфікація, визначена в ECMA-262, для створення мови сценаріїв загального призначення.

Синонім: специфікація ECMAScript

Незважаючи на те, що ECMA-262 є назвою стандарту, він представляє специфікацію мови сценаріїв ECMAScript.

ECMAScript містить правила, деталі та вказівки, яких повинна дотримуватися мова сценаріїв, щоб вважатись відповідним ECMAScript.

JavaScript

Мова сценаріїв загального призначення, яка відповідає специфікації ECMAScript.

JavaScript - це мова зі смаком кави, якою я люблю програмувати. ECMAScript - це специфікація, на якій вона базується. Читаючи специфікацію ECMAScript, ви дізнаєтесь, як створюватимова сценаріїв. Читаючи документацію JavaScript, ви дізнаєтесь, як користуватися мовою сценаріїв.

Коли люди називають JavaScript «діалектом мови ECMAScript», вони мають на увазі це в тому самому розумінні, що і коли говорять про англійські, французькі чи китайські діалекти. Діалект отримує більшу частину свого лексикону та синтаксису від батьківської мови, але відхиляється настільки, що заслуговує на розрізнення.

JavaScript здебільшого реалізує специфікацію ECMAScript, як описано в ECMA-262, але існує декілька відмінностей. Mozilla описує тут мовні функції JavaScript, не пов’язані з ECMAScript:

Механізм JavaScript

Програма або інтерпретатор, які розуміють і виконують код JavaScript.

Синоніми : інтерпретатор JavaScript, реалізація JavaScript

Двигуни JavaScript часто зустрічаються у веб-браузерах, включаючи V8 у Chrome, SpiderMonkey у Firefox та Chakra у Edge. Кожен движок схожий на мовний модуль для свого застосування, що дозволяє йому підтримувати певну підмножину мови JavaScript.

Механізм JavaScript для браузера - це як розуміння мови для людини.Якщо ми повторно завітаємо до нашого прикладу дій "ходьба", "біг", "стрибок", механізм JavaScript - це частина "сутності", яка насправді розуміє, що ці дії означають.

Ця аналогія допомагає пояснити кілька речей про браузери:

Відмінності в продуктивності браузера

Двоє людей можуть розпізнати команду “стрибати”, але одна може реагувати на команду швидше, оскільки людина може зрозуміти та обробити команду швидше, ніж інша людина. Подібним чином два браузери можуть розуміти код JavaScript, але один запускає його швидше, оскільки його механізм JavaScript реалізований ефективніше.

Відмінності в підтримці браузера

Розглянемо відмінності, які існують між людьми, які говорять однією мовою. Навіть якщо багато людей говорять по-англійськи, деякі можуть знати деякі слова, вирази та правила синтаксису, а інші - навпаки. Браузери однакові. Незважаючи на те, що всі механізми JavaScript браузерів розуміють JavaScript, деякі браузери краще розуміють мову, ніж інші. Існують відмінності в тому, як браузери підтримують мову.

Що стосується підтримки браузера, люди зазвичай говорять про "сумісність ECMAScript", а не про "сумісність JavaScript", навіть незважаючи на те, що механізми JavaScript аналізують і виконують ... ну, JavaScript. Це може трохи заплутати, але є пояснення.

Якщо ви пам'ятаєте, ECMAScript - це специфікація того, як може виглядати мова сценаріїв . Випуск нової редакції ECMAScript не означає, що всі існуючі механізми JavaScript раптом мають ці нові функції. Групи або організації, які відповідають за механізми JavaScript, мають бути в курсі останніх специфікацій ECMAScript та прийняти їх зміни.

Тому розробники, як правило, задають питання на зразок: "Яку версію ECMAScript підтримує цей браузер?" або "Які функції ECMAScript підтримує цей браузер?" Вони хочуть знати, чи досягли Google, Mozilla та Microsoft оновлення механізмів JavaScript своїх браузерів - наприклад, V8, SpiderMonkey та Chakra відповідно - за допомогою функцій, описаних в останньому ECMAScript.

Таблиця сумісності ECMAScript є хорошим ресурсом для відповіді на ці запитання.

Якщо виходить нове видання ECMAScript, механізми JavaScript не інтегрують все оновлення за один раз. Вони включають нові функції ECMAScript поступово, як видно з цього витягу з журналу змін Firefox у JavaScript:

Час виконання JavaScript

Середовище, в якому працює код JavaScript і інтерпретується механізмом JavaScript. Час виконання забезпечує об'єкти хосту, з якими JavaScript може працювати і працювати.

Синоніми : Середовище господаря

Час виконання JavaScript - це «існуюча сутність або система», згадана у визначенні мови сценаріїв. Код проходить через механізм JavaScript, і після аналізу та розуміння сутність або система виконує інтерпретовані дії. Собакапрогулянки, людинапробіжки, стрибає персонаж відеоігри (або у випадку наведеного зображення - аварії).

Додатки стають доступними для сценаріїв JavaScript, надаючи "об'єкти хосту" під час виконання. Для клієнтської частини середовищем виконання JavaScript буде веб-браузер, де хост-об'єкти, такі як вікна та документи HTML, доступні для маніпуляцій.

Ви коли-небудь працювали з вікном або об'єктами хосту документа? Об'єкти вікна та документа насправді не є частиною основної мови JavaScript. Це веб-API, об’єкти, що надаються браузером, виконуючи роль хостового середовища JavaScript. Для серверної частини середовищем виконання JavaScript є Node.js. Об’єкти хосту, пов’язані з сервером, такі як файлова система, процеси та запити, надаються в Node.js.

Цікавий момент: різні середовища виконання JavaScript можуть використовувати один і той же механізм JavaScript. Наприклад, V8 - це механізм JavaScript, який використовується як у Google Chrome, так і в Node.js - двох дуже різних середовищах.

ECMAScript 6

Це шосте видання стандарту ECMA-262 і містить основні зміни та вдосконалення специфікації ECMAScript.

Синоніми : ES6, ES2015 та ECMAScript 2015

Це видання ECMAScript змінило свою назву з ES6 на ES2015, оскільки в 2015 році Ecma International вирішила перейти на щорічні випуски ECMAScript. Відповідно, Ecma International також почала називати нові видання специфікації ECMAScript на основі року їх випуску. Коротше кажучи, ES6 та ES2015 - це дві різні назви одного і того ж.

Бабель

Транспілятор, який може перетворити код ES6 в код ES5.

Розробники можуть використовувати нові блискучі функції, що поставляються з ES6, але можуть турбуватися про сумісність між браузерами своїх веб-програм. На момент написання цієї статті Edge та Internet Explorer не повністю підтримують функції зі специфікації ES6.

Стурбовані розробники можуть використовувати Babel для перетворення свого коду ES6 у функціонально еквівалентну версію, яка використовує лише функції ES5. Усі основні браузери повністю підтримують ES5, тому вони можуть запускати код без будь-яких проблем.

Ще один цікавий ласощі

Сподіваюсь, ця інформація про JavaScript та ECMAScript виявилася вам корисною. Перш ніж ми завершимо щось тут, я хотів би поділитися ще однією інформацією, яку потрібно пояснити для таких молодих веб-розробників, як я.

Курка або яйце

Заплутаною історією є те, що JavaScript було створено в 1996 році. Потім він був переданий до Ecma International у 1997 році для стандартизації, що призвело до ECMAScript. У той же час, оскільки JavaScript відповідає специфікації ECMAScript, JavaScript є прикладом реалізації ECMAScript.

Це залишає нас таким цікавим фактом: ECMAScript базується на JavaScript, а JavaScript - на ECMAScript.

Я знаю.

Це звучить точно так само, як подорож у часі людей, які є власними батьками - трохи хиткий, але про якусь цікаву думку.

Все добре

Я знаю, що нам усім тут було весело, але це було багато інформації для перетравлення. Скористаюся нагодою, щоб попрощатися.

Будь ласка, залиште будь-які запитання, коментарі, пропозиції чи сумніви нижче.

Щиро дякую за читання!