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

תוכן שנמחק תוכן שנוסף
Matanyabot (שיחה | תרומות)
RafaelGreen (שיחה | תרומות)
שורה 31:
העברת פרמטרים לפונקציה בשפה משתנה בין טיפוסים פרימטיבים לאובייקטים.
 
טיפוסים פרמיטיבים עוברים by value. כלומר, השפההמפרש תעבירמעביר לפונקציה העתק של האובייקט ולא את האובייקט המקורי. טיפוסים מורכבים או אובייקטים עוברים by reference כלומר השפההמפרש מעבירהמעביר אתרפרנס הערך(מעין כמומצביע) שהואלערך ולאואינו יוצרתיוצר העתק של הערךשלו.{{הערה|{{קישור כללי|כתובת=https://www.w3schools.com/js/js_function_parameters.asp|כותרת=JavaScript Function Parameters|אתר=www.w3schools.com|תאריך_וידוא=2020-02-16}}}}
 
השפה תומכת בתחביר הסטנדרטי של שפת C, מבחינת [[אופרטור (תכנות)|אופרטורים]], מבני בקרה ופקודות, ומבדילה בין אותיות גדולות לקטנות (case-sensitive). כמו ברוב שפות התסריט טיפוסי השפה מקושרים לערכים ולא למשתנים, טיפוס משתנה X יכול להפוך במהלך הריצה ממספר למחרוזת לפי ההשמה.
 
השפה מבוססת "תכנות מונחה דגמי אב" (Prototypes), שהוא סוג (לא נפוץ) של [[תכנות מונחה-עצמים|תכנות מונחה־עצמים]]. השפה בעיקרה היא שפה מבוססת [[אובייקט (מדעי המחשב)|אובייקטים]] (אפילו טיפוס בוליאני [Boolean] הוא למעשה אובייקט). האובייקטים בשפה הם מערכים אסוציאטיביים. תכנות מונחה עצמים אפשרי, אבל לא בדרך המקובלת שלע"י הגדרת מחלקה שאיננה(class) החל קיימתמגירסה בשפהES6, אלאאו באמצעות יצירת אובייקט והצמדת מאפיינים אליו (בגירסה ES5 ומטה). כל מאפיין באובייקט יכול לתפקד כ[[משתנה (תכנות)|משתנה]] או [[שגרה (תכנות)|פונקציה]]. ישנם שלושה סוגי אובייקטים: אובייקטים של השפה כמו משתנים (כמו אובייקט תאריכי Date ואובייקט מחרוזתי), אובייקטים של הדפדפן (כמו אובייקטי window ו־document), ואובייקטים שיוצר המשתמש. אובייקטים של הדפדפן אינם נתמכים בגירסאות הרצות בסביבה שאינה דפדפן (כגון nodeJS). השפה תומכת בהרחבת מתודות של אובייקטים טבעיים בשפה כמו מחרוזות או Date באמצעות Prototyping.
 
השפה היא גם [[תכנות מונחה-אירועים|שפה מונחת־אירועים]] (Events), כך שמהלך ריצת התוכנית מבוסס על אירועים שמתרחשים בזמן ביצועה. לכל אובייקט קיים אוסף אירועים הייחודי לו, והדרך הנפוצה היא לכרוך פונקציות של המשתמש עם אירוע של אובייקט מובנה. להלן רשימה חלקית של האירועים:
שורה 54:
|Onunload
|-
|בעת עזיבתיציאה אובייקטמפוקוס
|Onblur
|-
שורה 81:
התוכנית המופיעה להלן כתובה בשפת JavaScript, והיא בודקת האם מספר שהועבר אליה הוא [[מספר ראשוני]]. הסימן "<tt>//</tt>" מציין שהטקסט שמימינו אינו חלק מקוד התוכנית, אלא הוא הערה שמטרתה להסביר את התוכנית למתכנת הקורא אותה. התוכנית מחולקת לשתי פונקציות, האחת בודקת האם מספר נתון הוא ראשוני, והשנייה מטפלת בדיאלוג עם המשתמש: קבלת המספר לבדיקה (קלט) והצגת תוצאות הבדיקה (פלט).
 
<syntaxhighlight lang="HTMLhtml" line="1">
<input type="text" id="primetest" value="" />
<input type="button" onClick="communicate()" value="Check" />
שורה 91:
// 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.
שורה 102:
// 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
}
if (i == 1) {
alert("1 is not a prime");
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>
שורה 126 ⟵ 130:
javascript: alert(document.cookie);
</syntaxhighlight>
בדוגמה זו נקפיץ באמצעות הפקודה alert תיבת הודעה עם העוגיות ששמורות במחשבבדפדפן לדף זה.
 
על מנת להגן מפני התקפות [[הנדסה חברתית (אבטחת מידע)|הינדוס חברתי (social engineering)]], השימוש בשיטה זו נחסם בדפדפנים המודרניים. כך לדוגמה, ב[[מוזילה פיירפוקס]] החל מגרסה 6, קוד שהוזרק בשיטה זו לא יתייחס לתוכן הדף, ומשכך, לא יתאפשר לו להשפיע על ה־DOM. ב[[גוגל כרום]] וב[[אינטרנט אקספלורר]] מגרסה 9 ומעלה, כאשר מדביקים כתובות כאלה בשורת הכתובת, הפרוטוקול (javascript:) מושמט מהכתובת המודבקת, ובכך מנטרל את השפעתו של הקוד.