Jaka jest różnica między JavaScript a ECMAScript?

462

Jaka jest różnica między ECMAScript a JavaScript? Z tego, co wydedukowałem, ECMAScript jest standardem, a JavaScript jest implementacją. Czy to jest poprawne?

Chłopak
źródło

Odpowiedzi:

183

ECMAScript jest językiem, podczas gdy JavaScript, JScript, a nawet ActionScript 3 są nazywane „dialektami”. Wikipedia rzuca na to trochę światła.

Ryan Florence
źródło
9
naprawdę fajne byłoby wyraźne mapowanie między JavaScript i wersjami ECMAScript, np. ES5 odpowiada JS1.5 itd. ah znalazłem to: en.wikipedia.org/wiki/JavaScript#Versions
Sam Joseph
2
@Sam - aktualizacja linku Sama: en.wikipedia.org/wiki/JavaScript#Version_history
Rop
65
Głosowałem na Yang i Li, ponieważ ta odpowiedź niewiele mówi i w zasadzie prowadzi do Wikipedii. Odpowiedź Yang Li jest znacznie bardziej szczegółowa i przydatna. Również to, czy jeden jest językiem / standardem, a drugi dialektem, implementacją itp., Jest otwarte na opinię, a nie fakt, z tego, co rozumiem. Podczas gdy ta odpowiedź wydaje się, że jest to fakt. Popraw mnie, jeśli się mylę. W rzeczywistości argumentowałbym, że sugestia zawarta w tej odpowiedzi nie jest nawet popularnym konsensusem. Jak większość widzi ECMAScript ma standard i JavaScript jako język.
redfox05
1
@Rop - Zaktualizuj ten link: en.wikipedia.org/wiki/ECMAScript#Version_correspondence
HDave
5
Nie zgadzam się. ECMAScript jest specyfikacją. JS, JScript, ActionScript to języki, które implementują taką specyfikację.
adripanico
611

Myślę, że należy się trochę lekcji historii.

JavaScript został pierwotnie nazwany Mocha i zmieniony na Livescript, ale ostatecznie stał się JavaScript.

Ważne jest, aby pamiętać, że JavaScript pojawił się przed ECMAscript, a historia podpowie, dlaczego.

Na początek JavaScript wywodził swoją nazwę od Javy i początkowo Brendan Eich (twórca JS) został poproszony o opracowanie języka przypominającego Javę dla Internetu dla Netscape.

Eich zdecydował jednak, że Java jest zbyt skomplikowana, jeśli chodzi o wszystkie jej reguły, i dlatego postanowił stworzyć prostszy język, w którym nawet początkujący mógłby się zakodować. Jest to widoczne w takich rzeczach, jak rozluźnienie potrzeby posiadania średnika.

Po ukończeniu języka zespół marketingowy Netscape poprosił firmę Sun o zezwolenie, by nazwała go JavaScript jako chwyt marketingowy i dlatego większość osób, które nigdy nie używały JavaScript, uważa, że ​​jest to związane z Javą.

Mniej więcej rok lub dwa po wydaniu JavaScript w przeglądarce IE Microsoftu wziął ten język i zaczął tworzyć własne implementacje, takie jak JScript. Jednocześnie IE dominowało na rynku i niedługo po tym, jak Netscape musiał zamknąć swój projekt.

Zanim Netscape upadł, postanowili uruchomić standard, który poprowadzi ścieżkę JavaScript, o nazwie ECMAScript.

ECMAScript miał kilka wydań, aw 1999 roku wydali ostatnią wersję (ECMAScript 3), zanim przeszli w stan hibernacji na następne 10 lat. W ciągu tych 10 lat Microsoft zdominował sceny, ale jednocześnie nie ulepszali swojego produktu, dlatego narodził się Firefox (prowadzony przez Eicha) i cała masa innych przeglądarek, takich jak Chrome, Opera.

ECMAScript wydał swoją 5. edycję w 2009 roku (4. edycja została porzucona) z funkcjami takimi jak tryb ścisły. Od tego czasu ECMAScript zyskał duży rozpęd i planuje wydać swoją 6. edycję w ciągu kilku miesięcy od teraz z największymi zmianami, jakie do tej pory miały.

Możesz skorzystać z listy funkcji ECMAScript 6 tutaj http://kangax.github.io/es5-compat-table/es6/, a także obsługi przeglądarki. Możesz nawet zacząć pisać Ecmascript 6, tak jak w przypadku CoffeeScript, i użyć kompilatora do skompilowania do Ecmascript 5.

To, czy ECMAScript jest językiem, a JavaScript jest dialektem, jest dyskusyjne, ale nie ważne. Jeśli nadal będziesz tak myślał, może Cię to zdezorientować. Nie ma kompilatora, który uruchamiałby ECMAScript, i uważam, że JavaScript jest uważany za język, który implementuje standard o nazwie ECMAScript.

Istnieją również inne zauważalne języki, które implementują ECMAScript, takie jak ActionScript (używany we Flashu)

Yang Li
źródło
1
Osoby zainteresowane kompilacją / transpozycją nowego standardu ES2015 do kodu ECMAScript 5 będą chciały sprawdzić Babel (wcześniej 6to5) dostępny na babeljs.io lub traceur na github.com/google/traceur-compiler . Dzięki tym narzędziom nie ma powodu, dla którego nie możesz teraz zacząć pisać „nowego JavaScript” i skorzystać z wszystkich najnowszych dodatków do języka.
LWurm
1
Nie wiedziałem, że Lua implementuje ECMAScript. Nie mogę znaleźć niczego, co to potwierdza. Jakie jest twoje źródło?
battmanz
2
@YangLi Czy zgadzasz się z odpowiedzią jerone poniżej, że języki ECMAScript nie zawierają interfejsu API DOM, którego wszyscy używamy, pisząc czysty JavaScript?
theJollySin
11
@ theJollySin Tak, ma rację. ECMAScript nie został zaprojektowany specjalnie dla przeglądarki, więc metody takie jak document.getElementById i inne interfejsy API DOM nie są częścią standardu. Należą one do standardów WHATWG, wraz z niektórymi innymi metodami specyficznymi dla przeglądarki, takimi jak localStorage itp. Jeśli weźmiesz węzeł i nie użyjesz żadnych zaimportowanych modułów, masz interfejs API tylko ECMAScript.
Yang Li
1
Jak wiele języków może implementować ten sam standard, a nie być tym samym językiem? Standard określa język. Jeśli jakiś język implementuje standard C ++, nazywa się C ++, a nie czymś innym (właśnie dlatego, że implementuje ten standard). Więc wciąż mam to samo pytanie ... jaka jest różnica?
Neme
157

ECMAScript = ES:

  • ECMAScript to standard języków skryptowych.

  • Języki takie jak Javascript są oparte na standardzie ECMAScript.

  • Standard ECMA opiera się na kilku oryginalnych technologiach, z których najbardziej znanymi są JavaScript (Netscape) i JScript (Microsoft).

  • ECMA oznacza Europejskie Stowarzyszenie Producentów Komputerów

JavaScript = JS:

  • JavaScript jest najpopularniejszą implementacją standardu ECMAScript.

  • Podstawowe funkcje Javascript są oparte na standardzie ECMAScript, ale Javascript ma również inne dodatkowe funkcje, których nie ma w specyfikacji / standardzie ECMA.

  • ActionScript i JScript to inne języki, które implementują ECMAScript.

  • JavaScript został przesłany do ECMA w celu standaryzacji, ale z powodu problemów ze znakiem towarowym o nazwie Javascript standard został nazwany ECMAScript.

  • Każda przeglądarka ma interpreter JavaScript.

ES5 = ECMAScript 5:

  • ES5 to wersja ECMAScript (stara / aktualna).

  • ES5 to JavaScript, który znasz i którego używasz dzisiaj w przeglądarce.

  • ES5 nie wymaga kroku kompilacji (transpilatorów), aby przekształcić go w coś, co będzie działać w dzisiejszych przeglądarkach.

  • ECMAScript wersja 5 została ukończona w grudniu 2009 roku, najnowsze wersje wszystkich głównych przeglądarek (Chrome, Safari, Firefox i IE) mają zaimplementowaną wersję 5.

  • Wersja 5.1 została ukończona w czerwcu 2011 roku.

ES6 = ECMAScript 6 = ES2015 = ECMAScript 2015:

  • ES2015 jest wersją ECMAScript (nowy / przyszły).

  • Oficjalnie zamiast ES6 należy użyć nazwy ES2015.

  • ES6 usunie wiele niedociągnięć w języku podstawowym, które zostały wyeliminowane w TypeScript i CoffeeScript.

  • ES6 to kolejna wersja JavaScript, ale nie działa w dzisiejszych przeglądarkach.

  • Istnieje wiele transpilatorów, które eksportują ES5 do działania w przeglądarkach.

BabelJS:

  • BabelJS to najpopularniejszy transpiler, który przekształca nowy JavaScript ES6 na Stary JavaScript ES5.

  • BabelJS umożliwia dziś pisanie JavaScriptu nowej generacji (oznacza ES2015).

  • BabelJS po prostu pobiera plik ES2015 i przekształca go w plik ES5.

  • Obecne wersje przeglądarek mogą teraz zrozumieć nowy kod JavaScript (ES2015), nawet jeśli jeszcze go nie obsługują.

TypeScript i CoffeeScript:

  • Oba zapewniają cukier syntaktyczny na ES5, a następnie są przekształcane w JavaScript zgodny z ES5. 

  • Piszesz TypeScript lub CoffeeScript, a następnie transpiler przekształca go w ES5 JavaScript.

Mahmoud Zalt
źródło
3
Javascript ma również inne dodatkowe funkcje, których nie ma w specyfikacji / standardzie ECMA ” Czy możesz podać kilka przykładów tych funkcji?
Aruna Herath
1
JavaScript jest najpopularniejszą implementacją standardu ECMAScript. ” Gdzie zatem mogę znaleźć źródło tej implementacji o nazwie „JavaScript”?
bzeaman
7
W moim pytaniu staram się wskazać na potencjalną nieprawidłowość sformułowania odpowiedzi. Użyto słowa „wdrożenie”. Mówi się, że JavaScript jest „najpopularniejszą implementacją ”. Wdrożenie to „ realizacja specyfikacji technicznej”. Co przekłada się na oprogramowanie . Zastanawiam się więc, gdzie jest to oprogramowanie o nazwie „JavaScript”.
bzeaman
4
@Corrodias Zgadzam się, że czuję się jak wybieranie nitów, ale myślę, że rozsądnie jest zrobić, gdy odpowiedź dotyczy definiowania rzeczy. JavaScript jest językiem znormalizowanym obecnie przez ECMAscript, porównywalnym do języka C znormalizowanego standardami ISO. Terminem JavaScript byłby zatem po prostu „język”, nic więcej.
bzeaman
4
Podsumowania ES5, ES2015 i BabelJS naprawdę oczyszczają powietrze z wielu nieporozumień, jakie można mieć, gdy ląduje w dzisiejszym świecie skryptów JS z programowania po stronie serwera. Świetna odpowiedź. +1
RBT
45

JavaScript = ECMAScript + DOM + BOM ;

  • Specyfikacja języka ECMAScript® definiuje całą logikę tworzenia i edycji obiektów, tablic, liczb itp.

  • DOM ( D Oument O bject M odel ) umożliwia komunikację z dokumentami HTML / XML (np document.getElementById('id');.).

  • BOM ( B rowser O bject M odel ) to hierarchia obiektów przeglądarki (np. Obiekt lokalizacji, obiekt historii, elementy formularza).

Historia nazewnictwa JavaScript:

Mocha ► LiveScript ► JavaScript ► (w rezultacie część JS) ECMA-262 ► ECMAScript ► JavaScript (składa się z ECMAScript + DOM + BOM)

jerone
źródło
7
Więc co jest w node.js nie jest JavaScript? Ponieważ nie ma interfejsu API DOM.
Aruna Herath
4
To jest poprawne. „Node.js jest zbudowany na nowoczesnych wersjach V8”. & „V8 implementuje ECMAScript, jak określono w ECMA-262, 5. edycja ...” & „DOM nie jest jednak zazwyczaj dostarczany przez silnik JavaScript, ale przez przeglądarkę. To samo dotyczy V8 - Google Chrome zapewnia DOM. ” (Źródło: nodejs.org/en/docs/es6 & github.com/v8/v8/wiki/Introduction )
jerone
7
@jerone Jakiej wersji ECMAScript używam, gdy piszę kod JavaScript? Czy różni się w zależności od przeglądarki lub biblioteki?
theJollySin
4
Czy możesz podać odniesienie JavaScript = ECMAScript + DOM API;?
Koray Tugay
2
@ koray-tugay Z wyjątkiem tego, nie ma zbyt wiele dokumentacji na temat tego, czym dokładnie jest JavaScript. Myślę, że dlatego to pytanie jest tak popularne. „Formuła” JavaScript = ECMAScript + DOM API;opiera się wyłącznie na ogólnie uzgodnionych, udokumentowanych warunkach, z których składa się JavaScript.
jerone
42

Technicznie ECMAScript jest językiem, którego wszyscy używają i wdrażają - jest to specyfikacja stworzona wiele lat temu, kiedy Netscape i Microsoft usiedli i próbowali ustandaryzować skrypty między JavaScript (językiem skryptowym Netscape) a JScript (Microsoft).

Następnie wszystkie te silniki pozornie implementują ECMAScript, jednak JavaScript (nazwa) jest teraz zawieszony zarówno z tradycyjnych powodów nazewnictwa, jak i jako marketingowy termin Mozilli dla różnych niestandardowych rozszerzeń (które chcą być w stanie „wersjonować” )

olliej
źródło
12
Netscape i Microsoft rzeczywiście się dogadali ?!
Cole Johnson
2
Myślałem, że Brandon chciał uczynić JS standardem przed Microsoftem, a jedynym, jaki mógł znaleźć, był ECMA.
Joe Simmons,
30

Co to jest ECMAScript, tj. ES?

ECMAScript jest standardem dla języka skryptowego, a język JavaScript jest oparty na standardzie ECMAScript.

Czy JavaScript jest dokładnie taki sam jak ECMAScript?

  • Nie, JavaScript nie jest dokładnie równoważny z ECMAScript.
  • Podstawowe funkcje Javascript są oparte na standardzie ECMAScript, ale Javascript ma również inne dodatkowe funkcje, których nie ma w specyfikacji / standardzie ECMA.

JavaScript = ECMAScript + DOM API;

DOM API, takie jak: document.getElementById('id');

Czy inne języki używają standardu ECMAScript?

  • Tak, istnieją języki inne niż JavaScript, które również implementują standard ECMAScript jako swój rdzeń.
  • ActionScript (używany przez Adobe Flash) i JScript (używany przez Microsoft) to języki, które implementują standard ECMAScript.

Dlaczego nazywa się ECMAScript?

  • Javascript został pierwotnie stworzony w Netscape i chcieli ujednolicić język. Tak, oni składać język do E uropejskiej C omputer M na anufacturer A ssociation (ECMA) dla normalizacji.
  • Pojawiły się jednak problemy ze znakiem towarowym związane z nazwą Javascript, a standard został nazwany ECMAScript, który również ma dziś swoją nazwę.
  • Z powodu problemów związanych ze znakami towarowymi, wersja języka Microsoft nosi nazwę JScript - mimo że JScript jest w istocie tym samym językiem co JavaScript.
Imran Ahmad
źródło
Istnieją kursy na zwykłym JS i ES6 JS. Który powinniśmy wziąć? Czy ES6 jest częściej używany w profesjonalnych ustawieniach? Dzięki.
MasterJoe2
16

Różne wersje JavaScript są implementacjami standardu ECMAScript.

Canen
źródło
11

wiem, że to stary post, ale mam nadzieję, że to komuś pomoże.

W latach 90. zaczęły pojawiać się różne wersje js, takie jak javascript z netscape, skrypt Js z Microsoft. Więc ecmascript został wprowadzony jako standard. Ale ecmascript stanowi tylko część javascript, która określa jego podstawową składnię, typy, obiekty itp. Prawdopodobnie wyjaśnia to niespójne implementacje javascript w różnych wersjach. przeglądarki

Odniesienia - Wrox (Professional Javascript dla programistów stron internetowych)

depz123
źródło
10

W moim rozumieniu ECMAScript to „Teoria” lub „Specyfikacja”, a Javascript to „Praktyczne” lub „Implementacja”.

Rethna
źródło
10

JavaScript jest językiem ECMAScript.

ECMAScript niekoniecznie jest JavaScript.

ryansstack
źródło
7

Istniejące odpowiedzi dość dobrze parafrazują główny punkt.

Najważniejsze jest to, że ECMAScript jest czystym językiem abstrakcyjnym, bez rozszerzeń specyficznych dla domeny, sam w sobie jest bezużyteczny. Specyfikacja określa jedynie język i rdzeń obiektów z niego.

Podczas gdy JavaScript, ActionScript i inne dialekty dodają do niej bibliotekę specyficzną dla domeny, możesz więc użyć jej do czegoś sensownego.

Istnieje wiele silników ECMAScript , niektóre z nich są oprogramowaniem typu open source, inne są zastrzeżone. Możesz połączyć je ze swoim programem, a następnie dodać swoje rodzime funkcje do obiektu globalnego, aby twój program stał się skryptowalny. Chociaż najczęściej są używane w przeglądarkach.

Calmarius
źródło
5

Javascript był oryginalną nazwą, która miała wykorzystać popularność Java. ECMA jest organem normalizacyjnym, który nadzoruje normę, która ostatecznie została wprowadzona, więc nazwy są w przybliżeniu równoważne.

Implementacje mają inne nazwy, takie jak V8 lub Rhino itp.

Jeremy Huiskamp
źródło
3

ECMAScript jest standardem dla JavaScrip t, spójrz na te instrukcje z MDN :

wprowadź opis zdjęcia tutaj

JavaScript

JavaScript (JS) to lekki interpretowany lub skompilowany w JIT język programowania z pierwszorzędnymi funkcjami. Chociaż jest najbardziej znany jako język skryptowy dla stron internetowych, używa go również wiele środowisk innych niż przeglądarka, takich jak node.js, Apache CouchDB i Adobe Acrobat. JavaScript to oparty na prototypach, dynamiczny język oparty na wielu paradygmatach, obsługujący style obiektowe, imperatywne i deklaratywne (np. Programowanie funkcjonalne). Przeczytaj więcej o JavaScript.


ECMAScript

Standardem dla JavaScript jest ECMAScript . Od 2012 r. Wszystkie nowoczesne przeglądarki w pełni obsługują ECMAScript 5.1. Starsze przeglądarki obsługują co najmniej ECMAScript 3. 17 czerwca 2015 r. ECMA International opublikowała szóstą główną wersję ECMAScript, która oficjalnie nosi nazwę ECMAScript 2015 i początkowo była nazywana ECMAScript 6 lub ES6. Od tego czasu standardy ECMAScript są wydawane co roku. Ta dokumentacja odnosi się do najnowszej wersji roboczej, którą jest obecnie ECMAScript 2018.

Aby uzyskać więcej informacji, odwiedź tutaj

Alireza
źródło
3

Oto moje ustalenia:

JavaScript: The Definitive Guide , napisany przez Davida Flanagana, zawiera bardzo zwięzłe wyjaśnienie:

JavaScript został stworzony w Netscape we wczesnych dniach Internetu, a technicznie „JavaScript” jest znakiem handlowym licencjonowanym przez Sun Microsystems (obecnie Oracle) używanym do opisania implementacji języka przez Netscape (obecnie Mozilla). Netscape przesłał ECMA język do standaryzacji, a ze względu na problemy ze znakami towarowymi znormalizowana wersja tego języka utknęła z niezręczną nazwą „ECMAScript”. Z tych samych powodów związanych ze znakami towarowymi wersja języka Microsoft jest oficjalnie znana jako „JScript”. W praktyce prawie wszyscy nazywają język JavaScript.

Blogu przez Microsoft wydaje się zgodzić z tym, co Flanagan wyjaśnia mówiąc ..

ECMAScript to oficjalna nazwa języka JavaScript, który wszyscy znamy i kochamy.

.. co sprawia mi myśleć, wszystkie wystąpienia JavaScriptw tym poście odniesienia (przez Microsoft znowu) muszą być zastąpione ECMASCript. Wydają się być ostrożni z używaniem ECMAScripttylko na tej , nowszej i bardziej technicznej stronie dokumentacji.

w3schools.com wydaje się zgadzać z powyższymi definicjami:

JavaScript został wynaleziony przez Brendana Eicha w 1995 r., A stał się standardem ECMA w 1997 r. ECMA-262 to oficjalna nazwa tego standardu. ECMAScript to oficjalna nazwa języka.

Kluczem jest tutaj: oficjalna nazwa języka .

Jeśli sprawdzisz strony wersji JavaScript Mozilli , zobaczysz następujące oświadczenie:

Przestarzałe. Wyraźna wersja i opcjonalne funkcje językowe były specyficzne dla Mozilli i są w trakcie usuwania. Firefox 4 był ostatnią wersją, która odwoływała się do wersji JavaScript (1.8.5). W nowych standardach ECMA często wspominane są teraz funkcje języka JavaScript wraz z ich pierwotną definicją w wydaniach ECMA-262, takich jak ECMAScript 2015.

a kiedy zobaczysz ostatnie informacje o wersji, zawsze zobaczysz odniesienie do standardów ECMAScript, takich jak:

  • Zaimplementowano właściwość Symbol.toStringTag ES2015 (błąd 1114580).

  • Zaimplementowano metody TypedArray.prototype.toString () i TypedArray.prototype.toLocaleString () (błąd 1121938).

Dokumenty WWW Mozilli mają także stronę wyjaśniającą różnicę między ECMAScript a JavaScript:

Jednak ogólny termin „JavaScript” rozumiany w kontekście przeglądarki internetowej zawiera kilka bardzo różnych elementów. Jednym z nich jest język podstawowy (ECMAScript), innym jest kolekcja interfejsów API sieci Web, w tym DOM (Document Object Model).

Wniosek

W moim rozumieniu ludzie używają słowa JavaScript nieco swobodnie w odniesieniu do podstawowej specyfikacji ECMAScript.

Powiedziałbym, że wszystkie nowoczesne implementacje JavaScript (lub silniki JavaScript) są w rzeczywistości implementacjami ECMAScript. Sprawdź definicję silnika V8 od Google, na przykład:

V8 to wysokowydajny silnik JavaScriptu Google, napisany w C ++ i używany między innymi w Google Chrome, przeglądarce open source Google i Node.js. Implementuje ECMAScript, jak określono w ECMA-262.

Wydaje się, że używają zamiennie słów JavaScript i ECMAScript, i powiedziałbym, że to właściwie silnik ECMAScript?

Dlatego większość silników JavaScript faktycznie implementuje standard ECMAScript, ale zamiast nazywać je silnikami ECMAScript, nazywają się silnikami JavaScript. Ta odpowiedź obsługuje również sposób, w jaki widzę sytuację.

Koray Tugay
źródło
2

Wątpię, czy kiedykolwiek użylibyśmy słowa „ECMAScript”, gdyby nie fakt, że nazwa „JavaScript” jest własnością firmy Sun. Dla wszystkich celów i celów językiem jest JavaScript. Nie chodzisz do księgarni w poszukiwaniu książek ECMAScript, prawda?

Nieco łatwo jest powiedzieć, że „JavaScript” to implementacja. JScript jest implementacją Microsoft.

Nosredna
źródło
1
Nie mam problemu ze słowem ECMAscript ... czy kiedykolwiek myślałeś, że dziwnie jest mówić MPEG zamiast wideo?
ryansstack
7
Ha ha. Czy to nie Brendan Eich powiedział, że ECMAScript brzmi jak choroba skóry? :-)
Nosredna
7
Sun jest właścicielem słowa Java, a nie JavaScript.
James R. Clayton
1
@ JamesR.Clayton JavaScript został stworzony w Netscape we wczesnych dniach Internetu, a technicznie „JavaScript” jest znakiem handlowym licencjonowanym przez Sun Microsystems (obecnie Oracle) używanym do opisania implementacji języka Netscape (obecnie Mozilla).
Koray Tugay
1

JavaScript to jedna gałąź języków utworzona wokół standardu ECMAScript. Uważam, że ECMA jest Europejskim Stowarzyszeniem Producentów Komputerów, nie dlatego, że jest to naprawdę istotne lub coś w tym rodzaju.

Nie zapomnij, że innym popularnym językiem utworzonym wokół standardu ECMA Script jest ActionScript, używany w Adobe Flash / Flex.

JAL
źródło