Koja je razlika između JavaScript-a i ECMAScripta?

Pokušao sam guglati "razliku između JavaScript-a i ECMAScripta."

Na kraju sam morao probiti se kroz more dvosmislenih i naizgled oprečnih rezultata:

"ECMAScript je standard."

"JavaScript je standard."

"ECMAScript je specifikacija."

"JavaScript je implementacija standarda ECMAScript."

"ECMAScript je standardizirani JavaScript."

"ECMAScript je jezik."

"JavaScript je dijalekt ECMAScripta."

"ECMAScript je JavaScript."

Suzdržavajući želju za plakanjem, podigao sam se i odlučio se baviti nekim bolnim, ali produktivnim istraživanjem.

Ovaj članak predstavlja moje trenutno razumijevanje razlika između JavaScript-a i ECMAScripta. Usmjeren je na ljude koji su upoznati s JavaScriptom, ali bi željeli jasnije razumjeti njegov odnos s ECMAScriptom, web preglednicima, Babelom i mnogim drugim. Također ćete dobro naučiti o skriptnim jezicima, JavaScript mehanizmima i JavaScript radnim vremenima.

Dakle, napumpajte se.

Pojmovnik JavaScript / ECMAScript

Ispod je popis definicija, dizajniranih s naglaskom na dosljednost i jasnoću. Definicije nisu 100% potpune. Konstruirane su na način koji pruža razumijevanje veze i odnosa između JavaScript-a i ECMAScripta na visokoj razini.

Bez daljnjega, krenimo.

Ecma International

Organizacija koja stvara standarde za tehnologije.

Da biste ilustrirali primjer "standardne" (iako ne one koju je kreirala Ecma), razmislite o svim tipkovnicama koje ste ikada koristili. Je li velika većina imala slova istim redoslijedom i razmaknicu, tipku Enter, tipke sa strelicama, a brojevi prikazani u nizu na vrhu? To je zato što većina proizvođača tipkovnica svoj dizajn tipkovnice temelji na standardu rasporeda QWERTY.

ECMA-262

Ovo je standard koji je objavila Ecma International. Sadrži specifikaciju za skriptni jezik opće namjene.

ECMA-262 je standard poput QWERTY, ali umjesto da predstavlja specifikaciju rasporeda tipkovnice, ona predstavlja specifikaciju jezika skripti koja se naziva ECMAScript.

Zamislite ECMA-262 kao referentni broj ECMAScripta.

Scenarski jezik

Programski jezik dizajniran posebno za djelovanje na postojeći entitet ili sustav

Za opću ideju o tome što programski jezik čini skriptnim jezikom, razmotrite naredbe "hodaj", "trči" i "skoči". Te radnje zahtijevaju nešto za njihovo provođenje, možda osoba, pas ili lik iz video igre. Bez glumca koji bi izvodio ove naredbe, "hodaj", "trči" i "skači" ne bi imalo smisla. Ovaj skup radnji analogan je skriptnom jeziku koji se fokusira na manipuliranje vanjskim entitetom.

ECMAScript

Specifikacija definirana u ECMA-262 za stvaranje skriptnog jezika opće namjene.

Sinonim: ECMAScript specifikacija

Iako je ECMA-262 naziv standarda, on predstavlja specifikaciju skriptnog jezika ECMAScript.

ECMAScript pruža pravila, detalje i smjernice kojih se mora pridržavati skriptni jezik da bi se smatrao usklađenim s ECMAScriptom.

JavaScript

Općeniti skriptni jezik koji odgovara ECMAScript specifikaciji.

JavaScript je jezik s okusom kave s kojim volim programirati. ECMAScript je specifikacija na kojoj se temelji. Čitajući specifikaciju ECMAScript, naučite kako stvaratiskriptni jezik. Čitajući JavaScript dokumentaciju, naučite kako se koristiti skriptnim jezikom.

Kad ljudi JavaScript nazivaju "dijalektom jezika ECMAScript", to misle u istom smislu kao kada govore o engleskom, francuskom ili kineskom dijalektu. Dijalekat većinu svog leksikona i sintakse izvodi iz svog matičnog jezika, ali dovoljno odstupa da zaslužuje razliku.

JavaScript uglavnom provodi specifikaciju ECMAScript kako je opisano u ECMA-262, ali postoji pregršt razlika. Mozilla ovdje opisuje JavaScript-ove ne-ECMAScript jezične značajke:

JavaScript mehanizam

Program ili tumač koji razumije i izvršava JavaScript kôd.

Sinonimi : JavaScript interpreter, implementacija JavaScript-a

JavaScript motori se često nalaze u web preglednicima, uključujući V8 u Chromeu, SpiderMonkey u Firefoxu i Chakra u Edgeu. Svaki je mehanizam poput jezičnog modula za svoju primjenu, što mu omogućuje da podržava određeni podskup JavaScript jezika.

JavaScript mehanizam za preglednik je poput razumijevanja jezika za osobu.Ako ponovno posjetimo naš primjer radnji "hodanje", "trčanje", "skakanje", JavaScript mehanizam dio je "entiteta" koji zapravo razumije što te radnje znače.

Ova analogija pomaže objasniti nekoliko stvari o preglednicima:

Razlike u performansama preglednika

Dvije osobe mogu prepoznati naredbu “skok”, ali jedna može brže reagirati na naredbu jer osoba može razumjeti i obraditi naredbu brže od druge osobe. Slično tome, dva preglednika mogu razumjeti JavaScript kôd, ali jedan ga pokreće brže jer se njegov JavaScript mehanizam implementira učinkovitije.

Razlike u podršci preglednika

Razmotrite razlike koje postoje između ljudi koji govore istim jezikom. Čak i ako mnogi ljudi govore engleski, neki mogu znati neke riječi, izraze i pravila sintakse, a drugi ne, i obrnuto. Preglednici su isti. Iako svi mehanizmi JavaScript preglednika razumiju JavaScript, neki preglednici bolje razumiju jezik od drugih. Postoje razlike u načinu na koji preglednici podržavaju jezik.

Što se tiče podrške preglednika, ljudi obično govore o "ECMAScript kompatibilnosti", a ne o "JavaScript kompatibilnosti", iako JavaScript mehanizmi raščlanjuju i izvršavaju ... pa, JavaScript. To može biti malo zbunjujuće, ali postoji objašnjenje.

Ako se sjećate, ECMAScript je specifikacija kako bi mogao izgledati skriptni jezik . Objavljivanje novog izdanja ECMAScripta ne znači da svi postojeći JavaScript motori odjednom imaju te nove značajke. Na skupinama ili organizacijama koje su odgovorne za JavaScript motore bit će u toku s najnovijim specifikacijama ECMAScripta i usvojiti njegove promjene.

Stoga programeri postavljaju pitanja poput: "Koju verziju ECMAScripta podržava ovaj preglednik?" ili "Koje značajke ECMAScripta podržava ovaj preglednik?" Žele znati jesu li Google, Mozilla i Microsoft uspjeli ažurirati JavaScript motore svojih preglednika - na primjer V8, SpiderMonkey i Chakra - značajkama opisanim u najnovijem ECMAScriptu.

Tablica kompatibilnosti ECMAScript dobar je resurs za odgovor na ta pitanja.

Ako izađe novo izdanje ECMAScripta, JavaScript mehanizmi ne integriraju cijelo ažuriranje odjednom. Oni postupno uključuju nove značajke ECMAScripta, kao što se vidi u ovom izvatku iz Firefoxova JavaScript dnevnika promjena:

Izvršenje JavaScripta

Okruženje u kojem se JavaScript kôd izvodi i tumači ga JavaScript mehanizam. Runtime pruža hostove objekte na kojima JavaScript može raditi i raditi s njima.

Sinonimi : Domaćinsko okruženje

JavaScript izvršavanje je „postojeći entitet ili sustav“ spomenut u definiciji skriptnog jezika. Kôd prolazi kroz JavaScript mehanizam, a nakon što se raščlani i razumije, entitet ili sustav izvršava interpretirane radnje. Pasšetnje, osobatrči, skače lik video igre (ili u slučaju gornje slike, olupine).

Aplikacije se stavljaju na raspolaganje JavaScript skriptama pružanjem "host objekata" tijekom izvođenja. Za klijentsku bi stranu JavaScript runtime bio web preglednik, gdje su hostovni objekti poput prozora i HTML dokumenata dostupni za manipulaciju.

Jeste li ikad radili s objektima prozora ili hosta dokumenata? Objekti prozora i dokumenata zapravo nisu dio osnovnog jezika JavaScript. To su web API-ji, objekti koje pruža preglednik koji djeluje kao JavaScript hostovno okruženje. Na strani poslužitelja, JavaScript vrijeme izvođenja je Node.js. Objekti hosta koji se odnose na poslužitelj, poput datotečnog sustava, procesa i zahtjeva, pružaju se u Node.js.

Zanimljiva stvar: različita vremena izvođenja JavaScripta mogu dijeliti isti JavaScript mehanizam. Na primjer, V8 je JavaScript mehanizam koji se koristi u Google Chromeu i Node.jsu - dva vrlo različita okruženja.

ECMAScript 6

To je šesto izdanje standarda ECMA-262, a sadrži velike promjene i poboljšanja u specifikaciji ECMAScript.

Sinonimi : ES6, ES2015 i ECMAScript 2015

Ovo izdanje ECMAScripta promijenilo je naziv iz ES6 u ES2015 jer je 2015. Ecma International odlučila preći na godišnja izdanja ECMAScripta. U skladu s tim, Ecma International također je počela imenovati nova izdanja specifikacije ECMAScript na temelju godine kada su objavljena. Ukratko, ES6 i ES2015 dva su različita imena za istu stvar.

Babel

Transpiler koji može pretvoriti ES6 kôd u ES5 kôd.

Programeri mogu koristiti sjajne nove značajke koje dolaze s ES6, ali mogu biti zabrinuti za kompatibilnost više preglednika za svoje web aplikacije. U vrijeme pisanja ovog članka Edge i Internet Explorer ne podržavaju u potpunosti značajke iz ES6 specifikacije.

Zabrinuti programeri mogu koristiti Babel za pretvaranje svog ES6 koda u funkcionalno ekvivalentnu verziju koja koristi samo ES5 značajke. Svi glavni preglednici u potpunosti podržavaju ES5, tako da mogu pokretati kôd bez ikakvih problema.

Još jedna zanimljiva sitnica

Nadam se da su vam ove informacije o JavaScriptu i ECMAScriptu bile korisne. Prije nego što ovdje zaključimo stvari, volio bih podijeliti još jedan podatak koji treba razjasniti za nove web programere poput mene.

Piletina ili jaje

Zbunjujuća je povijest da je JavaScript stvoren 1996. godine. Tada je 1997. poslan na standardizaciju Ecma Internationalu, što je rezultiralo ECMAScriptom. Istodobno, jer je JavaScript sukladan specifikaciji ECMAScript, JavaScript je primjer implementacije ECMAScripta.

To nam ostavlja ovu zabavnu činjenicu: ECMAScript se temelji na JavaScriptu, a JavaScript se temelji na ECMAScriptu.

Znam.

Zvuči točno kao da put kroz vrijeme ljudi koji su sami sebi roditelji - pomalo otkačen, ali nekako zabavno razmišljati.

Sve dobre stvari

Znam da smo se svi ovdje zabavili, ali to je bilo puno informacija za probaviti. Iskoristit ću priliku i oprostiti se.

Slobodno ostavite sva pitanja, komentare, prijedloge ili nedoumice u nastavku.

Puno hvala na čitanju!