מה ההבדל בין 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.

ללא התייחסות נוספת, בוא נתחיל.

אקמה אינטרנשיונל

ארגון שיוצר סטנדרטים לטכנולוגיות.

כדי להמחיש דוגמה ל"סטנדרט "(אם כי לא כזה שנוצר על ידי אקמה), חשוב על כל המקלדות בהן השתמשת אי פעם. האם לרוב המכריע היו אותיות באותו סדר, ופס רווח, מקש Enter, מקשי חצים, כשמספרים מוצגים בשורה למעלה? הסיבה לכך היא שרוב יצרני המקלדות מבססים את עיצוב המקלדת שלהם על תקן פריסת QWERTY.

ECMA-262

זהו תקן שפרסם Ecma International. הוא מכיל את המפרט לשפת סקריפטים למטרות כלליות.

ECMA-262 הוא תקן כמו QWERTY, אך במקום לייצג מפרט פריסת מקלדת, הוא מייצג מפרט לשפת סקריפטים הנקרא ECMAScript.

חשוב על ECMA-262 כמספר הייחוס של ECMAScript.

שפת תסריט

שפת תכנות שתוכננה במיוחד לפעולה על ישות או מערכת קיימת

לקבלת מושג כללי מה הופך את שפת התכנות לשפת סקריפטים, שקול את הפקודות "ללכת", "לרוץ" ו"קפוץ ". פעולות אלה דורשות משהו כדי לבצע אותן, אולי אדם, כלב או דמות של משחק וידאו. בלי שחקן שיבצע את הפקודות האלה, "ללכת", "לרוץ" ו"קפיצה "לא היו הגיוניים. מערכת פעולות זו מקבילה לשפת סקריפטים המתמקדת בתמרון ישות חיצונית.

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 תומך הדפדפן הזה?" הם רוצים לדעת אם גוגל, מוזילה ומיקרוסופט הסתדרו בעדכון מנועי ה- JavaScript של הדפדפנים שלהם - למשל V8, SpiderMonkey ו- Chakra, בהתאמה - בתכונות המתוארות ב- ECMAScript האחרון.

טבלת התאימות של ECMAScript היא מקור טוב למענה על שאלות אלה.

אם תצא מהדורה חדשה של ECMAScript, מנועי JavaScript אינם משלבים את כל העדכון בבת אחת. הם משלבים את התכונות החדשות של ECMAScript באופן הדרגתי, כפי שניתן לראות בקטע זה מתוך רשימת השינויים של JavaScript ב- Firefox:

זמן ריצה של 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 החליטה אקמה אינטרנשיונל לעבור למהדורות שנתיות של ECMAScript. לפיכך, חברת אקמה אינטרנשיונל החלה גם למנות מהדורות חדשות של מפרט ה- ECMAScript בהתבסס על השנה בה הן פורסמו. בקיצור, ES6 ו- ES2015 הם שני שמות שונים לאותו הדבר.

בבל

טרנספילר שיכול להמיר קוד ES6 לקוד ES5.

מפתחים יכולים להשתמש בתכונות החדשות והמבריקות שמגיעות עם ES6, אך עשויות להיות מודאגות מהתאימות בין דפדפנים לאפליקציות האינטרנט שלהם. בזמן כתיבת מאמר זה, Edge ו- Internet Explorer אינם תומכים במלואם בתכונות ממפרט ES6.

מפתחים מודאגים יכולים להשתמש בבבל כדי להמיר את קוד ה- ES6 שלהם לגרסה שוות ערך פונקציונלית המשתמשת רק בתכונות ES5. כל הדפדפנים הגדולים תומכים במלואם ב- ES5, כך שהם יכולים להריץ את הקוד ללא שום בעיה.

עוד דבר מעניין

אני מקווה שמצאת מידע שימושי זה על JavaScript ו- ECMAScript. לפני שנסכם דברים כאן, ברצוני לשתף עוד מידע אחד שצריך להבהיר עבור מפתחי אתרים מתחילים כמוני.

עוף או הביצה

קטע מבלבל של היסטוריה הוא ש- JavaScript נוצר בשנת 1996. לאחר מכן הוא הוגש לאקמה אינטרנשיונל בשנת 1997 לצורך סטנדרטיזציה, מה שהביא ל- ECMAScript. יחד עם זאת, מכיוון ש- JavaScript תואם למפרט ECMAScript, JavaScript הוא דוגמה ליישום ECMAScript.

זה משאיר אותנו עם עובדה מהנה זו: ECMAScript מבוסס על JavaScript, ו- JavaScript מבוסס על ECMAScript.

אני יודע.

זה נשמע בדיוק כמו הטרופ בזמן המסע של אנשים שהם ההורה שלהם - קצת משוגע, אבל קצת כיף לחשוב עליו.

כל הדברים הטובים

אני יודע שכולנו נהנינו כאן, אבל זה היה מידע רב לעיכול. אנצל את ההזדמנות ולהיפרד.

אל תהסס להשאיר שאלות, הערות, הצעות או דאגות למטה.

תודה רבה על הקריאה!