JavaScript – הבדלי גרסאות

מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכן שנמחק תוכן שנוסף
בתקני EcmaScript החדשים, נתן ליצור מחלקות, לרשת מחלקות ולהגדיר פעולות השמה ואחזור. נוספו מתודות המעודדות תכנות פונקציונלי ללא תופעות לוואי (כדוגמת Array.prototype.map(), Array.prototype.reduce()), ובגלל החופשיות שהשפה מציעה, אפשר לשכתב בה כמעט את הכל ולשנות פרטי מטא לתכונות של אובייקטים (עם Object.defineProperty() לדוגמה), נכון לאמר שהשפה תומכת ב-metaprogramming.
שורה 1: שורה 1:
{{להשלים|כל הערך=כן|סיבה=לא מעודכן. כמו כן חסר מידע על שימוש בג'אווה סקריפט כסביבת ריצה עצמאית|נושא=מחשוב}}
{{להשלים|כל הערך=כן|סיבה=לא מעודכן. כמו כן חסר מידע על שימוש בג'אווה סקריפט כסביבת ריצה עצמאית|נושא=מחשוב}}
{{שפת תכנות
{{שפת תכנות
|שם = ג'אווה סקריפט - JavaScript
| שם = ג'אווה סקריפט - JavaScript
|סמל=[[קובץ:Javascript.svg|220px|Javascript]]
| סמל = [[קובץ:Javascript.svg|220px|Javascript]]
|פרדיגמות = [[תכנות מונחה דגמי אב]], [[תכנות מונחה אירועים]]
| פרדיגמות = [[תכנות מונחה דגמי אב]], [[תכנות מונחה אירועים]], [[תכנות מונחה עצמים]], [[תכנות פונקציונלי]], metaprogramming
|שנה= [[1995]]
| שנה = [[1995]]
|מתכנן = [[ברנדן אייך]]
| מתכנן = [[ברנדן אייך]]
|מפתח = [[נטסקייפ]]
| מפתח = [[נטסקייפ]]
|גרסה אחרונה=
| גרסה אחרונה =
|תאריך גרסה אחרונה =
| תאריך גרסה אחרונה =
|טיפוסיות =
| טיפוסיות =
|מימושים =
| מימושים =
|ניבים =
| ניבים =
|הושפעה על ידי = [[שפת C]]
| הושפעה על ידי = [[שפת C]]
|השפיעה על =[[jscript]]
| השפיעה על = [[jscript]]
|רישיון =
| רישיון =
|סיומת = .js
| סיומת = .js
}}
}}
'''JavaScript''' (ב[[עברית]]: '''ג'אווה סקריפט''') היא [[שפת תכנות דינמית]] [[תכנות מונחה-עצמים|מונחית־עצמים]] המותאמת לשילוב ב[[אתר אינטרנט|אתרי אינטרנט]] ורצה על ידי [[דפדפן אינטרנט|דפדפן האינטרנט]] ב[[צד לקוח|צד הלקוח]]. השפה מרחיבה את יכולות שפת התגיות הבסיסית [[HTML]] ומאפשרת בכך ליצור יישומי אינטרנט מתוחכמים יותר. למעשה, רוב אתרי ה[[אינטרנט]] המודרניים משלבים שפה זו. היא ידועה בעיקר כשפה המוטבעת בדפי HTML על מנת להציג [[דף אינטרנט דינמי|דפים דינמיים]], שמשולבת בהם [[יישום ווב|תוכנה]]. קוד ה־JavaScript שמשולב בדף HTML מבוצע על ידי ה[[דפדפן]]. JavaScript נוחה מאוד לעבודה עם [[DOM]] ולתפעול [[DHTML]].
'''JavaScript''' (ב[[עברית]]: '''ג'אווה סקריפט''') היא [[שפת תכנות דינמית]] [[תכנות מונחה-עצמים|מונחית־עצמים]] המותאמת לשילוב ב[[אתר אינטרנט|אתרי אינטרנט]] ורצה על ידי [[דפדפן אינטרנט|דפדפן האינטרנט]] ב[[צד לקוח|צד הלקוח]]. השפה מרחיבה את יכולות שפת התגיות הבסיסית [[HTML]] ומאפשרת בכך ליצור יישומי אינטרנט מתוחכמים יותר. למעשה, רוב אתרי ה[[אינטרנט]] המודרניים משלבים שפה זו. היא ידועה בעיקר כשפה המוטבעת בדפי HTML על מנת להציג [[דף אינטרנט דינמי|דפים דינמיים]], שמשולבת בהם [[יישום ווב|תוכנה]]. קוד ה־JavaScript שמשולב בדף HTML מבוצע על ידי ה[[דפדפן]]. JavaScript נוחה מאוד לעבודה עם [[DOM]] ולתפעול [[DHTML]].

גרסה מ־14:42, 17 באוגוסט 2020

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


שגיאות פרמטריות בתבנית:שפת תכנות

פרמטרים [ שנה ] לא מופיעים בהגדרת התבנית

ג'אווה סקריפט - JavaScript
JavaScript
פרדיגמות תכנות מונחה דגמי אב, תכנות מונחה אירועים, תכנות מונחה עצמים, תכנות פונקציונלי, metaprogramming
תאריך השקה מאי 1996 עריכת הנתון בוויקינתונים
מתכנן ברנדן אייך
מפתח נטסקייפ
הושפעה על ידי שפת C
השפיעה על jscript
סיומת .js
האתר הרשמי
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית

JavaScriptעברית: ג'אווה סקריפט) היא שפת תכנות דינמית מונחית־עצמים המותאמת לשילוב באתרי אינטרנט ורצה על ידי דפדפן האינטרנט בצד הלקוח. השפה מרחיבה את יכולות שפת התגיות הבסיסית HTML ומאפשרת בכך ליצור יישומי אינטרנט מתוחכמים יותר. למעשה, רוב אתרי האינטרנט המודרניים משלבים שפה זו. היא ידועה בעיקר כשפה המוטבעת בדפי HTML על מנת להציג דפים דינמיים, שמשולבת בהם תוכנה. קוד ה־JavaScript שמשולב בדף HTML מבוצע על ידי הדפדפן. JavaScript נוחה מאוד לעבודה עם DOM ולתפעול DHTML.

על בסיס סביבת הריצה של הדפדפנים, נבנו סביבות ריצה מקומיות להרצה של ג'אווה סקריפט במחשבים אישיים ובשרתים (Node.js, Deno.js).

היסטוריה

השפה פותחה על ידי חברת נטסקייפ בשנת 1995, ויושמה לראשונה בדפדפן נטסקייפ 2.0. הגרסה הייתה JavaScript 1.0. שמה המקורי היה LiveScript, והוא שונה ל־JavaScript מטעמים של פופולריות וניסיון לעניין את חברת סאן. בנוסף לכתיבת תסריטים בצד הלקוח (בדפדפן), מאפשרת JavaScript כתיבת תסריטים גם בצד השרת, לתפעול בשרת אינטרנט. התחביר של שפת ActionScript, שמיוחדת לפלאש, נגזר משפה זו. קיימת גרסה תקנית של השפה הקרויה ECMAScript.

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

אפיוני השפה

השפה היא שפה שעוברת תהליך אינטרפטרציה (פירוש) ולא קומפילציה (הידור).[1] משמעות הדבר שקוד המקור לא צריך לעבור תהליך של קימפול (הידור) לשפת ביניים ואז להריץ אותו, אלא המפרש (interpreter) קורא שורה שורה או מקבץ של שורות (למשל scope של פונקציה) ומריץ אותן ישירות. תהליך זה מקל לעיתים להבין היכן התבצעה שגיאה ומאפשר דיבוג קל יותר של השפה.

העברת פרמטרים לפונקציה בשפה משתנה בין טיפוסים פרימטיבים לאובייקטים. טיפוסים פרמיטיבים עוברים by value כלומר השפה מעבירה את הערך כמו שהוא ולא יוצרת העתק של הערך. טיפוסים מורכבים או אובייקטים עוברים by reference כלומר השפה תעביר העתק של האובייקט ולא את האובייקט המקורי.[2]

השפה תומכת בתחביר הסטנדרטי של שפת C, מבחינת אופרטורים, מבני בקרה ופקודות, ומבדילה בין אותיות גדולות לקטנות (case-sensitive). כמו ברוב שפות התסריט טיפוסי השפה מקושרים לערכים ולא למשתנים, משתנה X יכול להפוך במהלך הריצה ממספר למחרוזת לפי ההשמה.

השפה מבוססת "תכנות מונחה דגמי אב" (Prototypes), שהוא סוג (לא נפוץ) של תכנות מונחה־עצמים. השפה בעיקרה היא שפה מבוססת אובייקטים (אפילו טיפוס בוליאני [Boolean] הוא למעשה אובייקט). האובייקטים בשפה הם מערכים אסוציאטיביים. תכנות מונחה עצמים אפשרי, אבל לא בדרך המקובלת של הגדרת מחלקה שאיננה קיימת בשפה, אלא באמצעות יצירת אובייקט והצמדת מאפיינים אליו. כל מאפיין באובייקט יכול לתפקד כמשתנה או פונקציה. ישנם שלושה סוגי אובייקטים: אובייקטים של השפה כמו משתנים (כמו אובייקט תאריכי Date ואובייקט מחרוזתי), אובייקטים של הדפדפן (כמו אובייקטי window ו־document), ואובייקטים שיוצר המשתמש. השפה תומכת בהרחבת מתודות של אובייקטים טבעיים בשפה כמו למשל מחרוזות או Date באמצעות Prototyping.

השפה היא גם שפה מונחת־אירועים (Events), כך שמהלך ריצת התוכנית מבוסס על אירועים שמתרחשים בזמן ביצועה. לכל אובייקט קיים אוסף אירועים הייחודי לו, והדרך הנפוצה היא לכרוך פונקציות של המשתמש עם אירוע של אובייקט מובנה. להלן רשימה חלקית של האירועים:

תיאור אירוע
בעת טעינה onload
בעת לחיצה onclick
בעת סגירת דף onabort
בעת סגירת חלון OnUnload
בעת עזיבת אובייקט OnBlur
בעת שינוי אובייקט onchange
בעת בחירה onselect
בעת משלוח onsubmit
בעת שגיאה onerror
בעת מעבר עכבר onmouseover
בעת עזיבת סימן העכבר את האובייקט onmouseout

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

דוגמה לתוכנית JavaScript

התוכנית המופיעה להלן כתובה בשפת JavaScript, והיא בודקת האם מספר שהועבר אליה הוא מספר ראשוני. הסימן "//" מציין שהטקסט שמימינו אינו חלק מקוד התוכנית, אלא הוא הערה שמטרתה להסביר את התוכנית למתכנת הקורא אותה. התוכנית מחולקת לשתי פונקציות, האחת בודקת האם מספר נתון הוא ראשוני, והשנייה מטפלת בדיאלוג עם המשתמש: קבלת המספר לבדיקה (קלט) והצגת תוצאות הבדיקה (פלט).

<input type="text" id="primetest" value="" />
<input type="button" onClick="communicate()" value="Check" />

<script type="text/javascript">
function get_factor(n)
{
 let sr = Math.sqrt(n)
 // try to find a factor that is not 1.
 for (let i=2; i<=sr; i+=1) {
 if (n%i === 0) // is n divisible by i?
 return i
 }
 return 1 // n is a prime.
} // End of get_factor function.

function communicate()
{ // communicate with the user.
 let i = document.getElementById("primetest").value; // get checked number, using DOM.
 // is it a valid input?
 if ( isNaN(i) || (i <= 0) || (Math.floor(i) !== i) ) {
 alert("The checked object should be a whole positive number");
 return
 }
 let factor = get_factor(i)
 if (factor === 1)
 alert(i + " is a prime")
 else
 alert(i + " is not a prime, " + i + "=" + i/factor +"x"+ factor)
} // End of communication function
</script>

אבטחה בתוכניות JavaScript

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

JavaScript Manipulation

בדפדפנים ישנים ופחות מאובטחים, ניתן להזריק ולהריץ קוד שלא מוזכר כלל בקוד מקור, בכל דף אינטרנט שמופיע בדפדפן. שיטה זו נקראת JavaScript manipulation. ב־JavaScript manipulation מכניסים את פקודות הסקריפט בשורת הכתובת של הדפדפן, ולרוב הוא מיועד להשפיע על ה־DOM. דוגמה:

javascript: alert(document.cookie);

בדוגמה זו נקפיץ באמצעות הפקודה alert תיבת הודעה עם העוגיות ששמורות במחשב לדף זה.

על מנת להגן מפני התקפות הינדוס חברתי (social engineering), השימוש בשיטה זו נחסם בדפדפנים המודרניים. כך לדוגמה, במוזילה פיירפוקס החל מגרסה 6, קוד שהוזרק בשיטה זו לא יתייחס לתוכן הדף, ומשכך, לא יתאפשר לו להשפיע על ה־DOM. בגוגל כרום ובאינטרנט אקספלורר מגרסה 9 ומעלה, כאשר מדביקים כתובות כאלה בשורת הכתובת, הפרוטוקול (javascript:) מושמט מהכתובת המודבקת, ובכך מנטרל את השפעתו של הקוד.

הדבקת הקוד מהדוגמה הקודמת בשורת הכתובת ידביק את הקוד הבא -

alert(document.cookie);

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

יישומי JavaScript

לJavaScript יישומים רבים המשמשים בהרבה פלטפורמות. בזכות הפופולריות שלה, JavaScript זכתה להרבה ספריות ומהדרים (מלבד השימוש כשפת תכנות וחישוב ובניית קוד פשוט להרצה בדפדפן [הנקרא ונילה]) המאפשרים לבנות בעזרתה יישומים שונים. רוב היישומים הנבנים באמצעות ספריות אלה נבנים בNode.js אך לפעמים מהודרים לקוד JavaScript רגיל על מנת להריץ אותם בדפדפנים

לעבודה קלה עם הDOM מוכרת הספרייה jQuery.

לבניית אפליקציות web front end מוכרות הספריות Angular, React, Vue.js, וSvelte.

לבניית אפליקצייות למכשירים המריצים אנדרואיד וiOS מוכרות הספריות ReactNative, וNativeScript שמהדרות קוד המתבסס על React וAngular בהתאמה לקוד הנקרא נטיבי, כלומר אפליקציות הנראות כאילו נכתבו בשפות הנטיביות לכל פלטפורמה, Java עבור Android, וObjective-C עבור iOS. לעומתן מוכרת גם הספרייה ionic שמהדרת את הJavaScript לאפליקצייות היברידיות, הממנפות את הקוד לבניית תוכנות הנראות רגילות אך למעשה מבוססות web גם בזמן הריצה. תוכנות אלה עדיין מקבלות גישה לכלים השמורים ליישמונים נטיבים כמו שימוש חופשי במצלמה. ספריות אלה לרוב מבוססות על תחביר הדומה לHTML.

לבניית שרתי אינטרנט הפועלים בצורה א-סינכרונית ומבוססים על ניתוב, מוכרת הספרייה Express.js. ספרייה זו אינה מבוססת על HTML כברירת מחדל, אלא רק על JavaScript לבניית API מבוסס JSON לדוגמה, אך למעשה היא יכולה להגיש כל דבר, החל מקבצים וכלה בHTMl בו מוזרק מידע. היא עושה שימוש בפרוטוקלי HTTP על מנת להעביר מידע מהלקוח ובחזרה.

לבניית תוכנות למחשבים עם מערכת הפעלה Windows, macOs, או לינוקס מוכרת הספרייה Electron שמאחורי הקלעים מתקינה סביבת ריצה ייעודית הנקראת כרומיום (שהיא גם הליבה של גוגל כרום) ומצגה דפי אינטרנט בתוכנות מחשב רגילות המקבלות גם גישה לפונקצייות השמורות לתוכנות בלבד כמו שליטה מלאה על הקבצים ואפשרות התקנה.

ייבוא קובצי JS

ניתן גם לייבא את הסקריפט מתוך קובץ, במקום לכתוב הכל בדף HTML, באמצעות הפרמטר src (קיצור של source) בתגית script. דוגמה:

<script type="text/javascript" src="filename.js"></script>

כאשר filename.js הוא קובץ ה .js אליו מפנים.

קובץ ה־.js מכיל את כל הפקודות המופיעות בתוך התגית <script> ושהדפדפן יריץ.

כמו כן, קובץ JavaScipt יכול לייבא קבצים נוספים שאינם מוצהרים במסמך ה־HTML בצורתו ההתחלתית. לדוגמה:

let myScript = document.createElement("script"); // יצירת אלמנט סקריפט חדש
myScript.type = "text/javascript"; // קביעת סוג הסקריפט
myScript.src = "filename.js"; // קבע את הקובץ שיש לייבא
document.head.appendChild(myScript); // הכנס את האלמנט למסמך, על־מנת להריץ אותו

בדוגמה זו, ארבע שורות אלה, הכלולות באחד הסקריפטים הקיימים בדף, יוצרות אלמנט script חדש, המייבא את הקובץ "filename.js", ומוסיפות אותו למסמך ה־HTML (לסוף אלמנט ה־head של המסמך).

ראו גם

קישורים חיצוניים

הערות שוליים

  1. ^ Introduction, web.stanford.edu
  2. ^ JavaScript Function Parameters, www.w3schools.com