Ποια είναι η διαφορά μεταξύ JavaScript και ECMAScript;

Έχω δοκιμάσει το Google "τη διαφορά μεταξύ JavaScript και ECMAScript".

Κατέληξα να περάσω μέσα από μια θάλασσα διφορούμενων και φαινομενικά αντικρουόμενων αποτελεσμάτων:

"Το ECMAScript είναι ένα πρότυπο."

"Το JavaScript είναι ένα πρότυπο."

"Το ECMAScript είναι μια προδιαγραφή."

"Το JavaScript είναι μια εφαρμογή του προτύπου ECMAScript."

"Το ECMAScript είναι τυποποιημένο JavaScript."

"Το ECMAScript είναι μια γλώσσα."

"Το JavaScript είναι μια διάλεκτος του ECMAScript."

"Το ECMAScript είναι JavaScript."

Κρατώντας πίσω την επιθυμία να κλαίω, στάθηκα και αποφάσισα να δεσμευτώ για μια οδυνηρή αλλά παραγωγική έρευνα.

Αυτό το άρθρο αντιπροσωπεύει την τρέχουσα κατανόησή μου για τις διαφορές μεταξύ JavaScript και ECMAScript. Απευθύνεται σε άτομα που είναι εξοικειωμένα με το JavaScript, αλλά θα ήθελαν μια σαφέστερη κατανόηση της σχέσης του με το ECMAScript, τα προγράμματα περιήγησης στο Web, το 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 εκτός ECMAS εδώ:

Μια μηχανή JavaScript

Ένα πρόγραμμα ή διερμηνέας που κατανοεί και εκτελεί κώδικα JavaScript.

Συνώνυμα : Διερμηνέας JavaScript, εφαρμογή JavaScript

Οι μηχανές JavaScript βρίσκονται συνήθως σε προγράμματα περιήγησης ιστού, συμπεριλαμβανομένων των V8 στο Chrome, SpiderMonkey στον Firefox και Chakra στο Edge. Κάθε μηχανή είναι σαν μια γλωσσική ενότητα για την εφαρμογή της, επιτρέποντάς της να υποστηρίζει ένα συγκεκριμένο υποσύνολο της γλώσσας JavaScript.

Μια μηχανή JavaScript σε ένα πρόγραμμα περιήγησης είναι σαν την κατανόηση της γλώσσας σε ένα άτομο.Αν ξαναεπισκεφτούμε το παράδειγμα των ενεργειών "walk", "run", "jump", μια μηχανή JavaScript είναι το μέρος μιας "οντότητας" που πραγματικά κατανοεί τι σημαίνουν αυτές οι ενέργειες.

Αυτή η αναλογία βοηθά να εξηγήσει μερικά πράγματα σχετικά με τα προγράμματα περιήγησης:

Διαφορές στην απόδοση του προγράμματος περιήγησης

Δύο άτομα μπορεί να αναγνωρίσουν την εντολή «άλμα», αλλά κάποιος μπορεί να αντιδράσει στην εντολή γρηγορότερα επειδή το άτομο μπορεί να καταλάβει και να επεξεργαστεί την εντολή γρηγορότερα από το άλλο άτομο. Ομοίως, δύο προγράμματα περιήγησης μπορούν να κατανοήσουν τον κώδικα JavaScript, αλλά ο ένας τον τρέχει γρηγορότερα επειδή η μηχανή του JavaScript εφαρμόζεται πιο αποτελεσματικά.

Διαφορές στην υποστήριξη του προγράμματος περιήγησης

Σκεφτείτε τις διαφορές που υπάρχουν μεταξύ των ανθρώπων που μιλούν την ίδια γλώσσα. Ακόμα κι αν πολλοί άνθρωποι μιλούν αγγλικά, κάποιοι μπορεί να γνωρίζουν κάποιες λέξεις, εκφράσεις και συντακτικούς κανόνες που άλλοι δεν το κάνουν και το αντίστροφο. Τα προγράμματα περιήγησης είναι με τον ίδιο τρόπο. Παρόλο που οι μηχανές JavaScript των προγραμμάτων περιήγησης καταλαβαίνουν όλα τα JavaScript, ορισμένα προγράμματα περιήγησης έχουν μεγαλύτερη κατανόηση της γλώσσας από άλλα. Υπάρχουν διαφορές στον τρόπο με τον οποίο τα προγράμματα περιήγησης υποστηρίζουν τη γλώσσα.

Όσον αφορά την υποστήριξη του προγράμματος περιήγησης, οι άνθρωποι συνήθως μιλάνε για "συμβατότητα με σενάριο ECMAS" και όχι για "συμβατότητα JavaScript", παρόλο που οι μηχανές JavaScript αναλύουν και εκτελούν… καλά, JavaScript. Αυτό μπορεί να είναι λίγο συγκεχυμένο, αλλά υπάρχει μια εξήγηση.

Αν θυμάστε, το ECMAScript είναι μια προδιαγραφή για το πώς θα μπορούσε να μοιάζει μια γλώσσα σεναρίου . Η κυκλοφορία μιας νέας έκδοσης του ECMAScript δεν σημαίνει ότι όλοι οι κινητήρες JavaScript που υπάρχουν ξαφνικά έχουν αυτές τις νέες δυνατότητες. Εναπόκειται στις ομάδες ή τους οργανισμούς που είναι υπεύθυνοι για τις μηχανές JavaScript να είναι ενημερωμένοι σχετικά με την τελευταία προδιαγραφή ECMAScript και να υιοθετήσουν τις αλλαγές της.

Επομένως, οι προγραμματιστές τείνουν να κάνουν ερωτήσεις όπως, "Ποια έκδοση του ECMAScript υποστηρίζει αυτό το πρόγραμμα περιήγησης;" ή "Ποιες δυνατότητες ECMAScript υποστηρίζει αυτό το πρόγραμμα περιήγησης;" Θέλουν να μάθουν αν η Google, η Mozilla και η Microsoft έχουν φτάσει στην ενημέρωση των μηχανών JavaScript του προγράμματος περιήγησής τους - για παράδειγμα V8, SpiderMonkey και Chakra, αντίστοιχα - με τις δυνατότητες που περιγράφονται στο τελευταίο ECMAScript.

Ο πίνακας συμβατότητας ECMAScript είναι ένας καλός πόρος για την απάντηση σε αυτές τις ερωτήσεις.

Εάν βγει μια νέα έκδοση του ECMAScript, οι μηχανές JavaScript δεν ενσωματώνουν ολόκληρη την ενημέρωση ταυτόχρονα. Ενσωματώνουν σταδιακά τις νέες δυνατότητες ECMAScript, όπως φαίνεται σε αυτό το απόσπασμα από το changelog JavaScript του Firefox:

Χρόνος εκτέλεσης JavaScript

Το περιβάλλον στο οποίο εκτελείται ο κώδικας JavaScript και ερμηνεύεται από μια μηχανή JavaScript. Ο χρόνος εκτέλεσης παρέχει τα κεντρικά αντικείμενα στα οποία μπορεί να λειτουργήσει και να λειτουργήσει η JavaScript.

Συνώνυμα : Περιβάλλον φιλοξενίας

Ο χρόνος εκτέλεσης JavaScript είναι η «υπάρχουσα οντότητα ή σύστημα» που αναφέρεται στον ορισμό της γλώσσας δέσμης ενεργειών. Ο κώδικας περνά μέσω της μηχανής JavaScript και μόλις αναλυθεί και κατανοηθεί, μια οντότητα ή σύστημα εκτελεί τις ερμηνευμένες ενέργειες. Ενα σκυλίπερπατάει, ένα άτομοτρέχει, ένας χαρακτήρας βιντεοπαιχνιδιού πηδά (ή ​​στην περίπτωση της παραπάνω εικόνας, συντρίμμια).

Οι εφαρμογές καθίστανται διαθέσιμες σε scripting 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 είναι δύο διαφορετικά ονόματα για το ίδιο πράγμα.

Βαβυλωνία

Ένα transpiler που μπορεί να μετατρέψει τον κώδικα ES6 σε κώδικα ES5.

Οι προγραμματιστές μπορούν να χρησιμοποιήσουν τις λαμπερές νέες δυνατότητες που συνοδεύουν το ES6, αλλά μπορεί να ασχολούνται με τη συμβατότητα μεταξύ προγραμμάτων περιήγησης για τις εφαρμογές ιστού τους. Κατά τη στιγμή της σύνταξης αυτού του άρθρου, οι Edge και Internet Explorer δεν υποστηρίζουν πλήρως δυνατότητες από την προδιαγραφή ES6.

Οι ενδιαφερόμενοι προγραμματιστές μπορούν να χρησιμοποιήσουν το Babel για να μετατρέψουν τον κώδικα ES6 σε λειτουργικά ισοδύναμη έκδοση που χρησιμοποιεί μόνο λειτουργίες ES5. Όλα τα μεγάλα προγράμματα περιήγησης υποστηρίζουν πλήρως το ES5, ώστε να μπορούν να εκτελούν τον κώδικα χωρίς προβλήματα.

Ένα ακόμη ενδιαφέρον tidbit

Ελπίζω να βρείτε χρήσιμες αυτές τις πληροφορίες σχετικά με το JavaScript και το ECMAScript. Προτού ολοκληρώσουμε τα πράγματα εδώ, θα ήθελα να μοιραστώ ένα ακόμη κομμάτι πληροφοριών που πρέπει να αποσαφηνιστεί για τους αρχάριους προγραμματιστές ιστού όπως εμένα.

Κοτόπουλο ή το αυγό

Ένα συγκεχυμένο κομμάτι της ιστορίας είναι ότι η JavaScript δημιουργήθηκε το 1996. Στη συνέχεια υποβλήθηκε στην Ecma International το 1997 για τυποποίηση, η οποία κατέληξε σε ECMAScript. Ταυτόχρονα, επειδή το JavaScript συμμορφώθηκε με τις προδιαγραφές ECMAScript, το JavaScript είναι ένα παράδειγμα υλοποίησης του ECMAScript.

Αυτό μας αφήνει με αυτό το διασκεδαστικό γεγονός: Το ECMAScript βασίζεται σε JavaScript και το JavaScript βασίζεται σε ECMAScript.

Ξέρω.

Ακούγεται ακριβώς σαν το ταξίδι του χρόνου των ανθρώπων που είναι οι γονείς τους - λίγο περίεργο, αλλά διασκεδαστικό να σκεφτόμαστε.

Ολα τα καλά πράγματα

Ξέρω ότι όλοι διασκεδάσαμε εδώ, αλλά ήταν πολλές πληροφορίες για να χωνέψουμε. Θα εκμεταλλευτώ αυτήν την ευκαιρία για να πω αντίο.

Μη διστάσετε να αφήσετε ερωτήσεις, σχόλια, προτάσεις ή ανησυχίες παρακάτω.

Σας ευχαριστώ πολύ για την ανάγνωση!