Каква е разликата между JavaScript и ECMAScript?

Опитах да потърся в Google „разликата между 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 очертава тук не-ECMAScript езиковите функции на JavaScript:

Двигател на 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, както се вижда в този откъс от дневника за промени на JavaScript на Firefox:

Времетраене на JavaScript

Средата, в която се изпълнява JavaScript кодът и се интерпретира от JavaScript двигател. Времето за изпълнение осигурява хост обектите, с които JavaScript може да работи и да работи.

Синоними : Домакинска среда

Времетраенето на JavaScript е „съществуващата същност или система“, споменати в дефиницията на скриптовия език. Кодът преминава през JavaScript двигателя и след като бъде анализиран и разбран, обект или система изпълнява интерпретираните действия. Кучеразходки, човекработи, скача герой от видеоигра (или в случай на горното изображение, останки).

Приложенията се правят достъпни за JavaScript скриптове, като предоставят „обекти на хоста“ по време на изпълнение. За клиентската страна времето за изпълнение на JavaScript ще бъде уеб браузърът, където хост обекти като Windows и 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.

Знам.

Звучи точно като пътешествието във времето на хората, които са сами по себе си родители - малко развълнувано, но някак забавно за мислене.

Всички хубави неща

Знам, че всички сме се забавлявали тук, но това беше много информация за смилане. Ще се възползвам от възможността да се сбогувам.

Моля, не се колебайте да оставите въпроси, коментари, предложения или притеснения по-долу.

Благодаря ви много за четенето!