טיפוסים פרמיטיביים עוברים by value. כלומר, המפרש מעביר לפונקציה העתק של האובייקט ולא את האובייקט המקורי. טיפוסים מורכבים או אובייקטים עוברים by reference כלומר המפרש מעביר רפרנס (מעין מצביע) לערך ואינו יוצר העתק שלו.
השפה תומכת בתחביר הסטנדרטי של שפת C, מבחינת אופרטורים, מבני בקרה ופקודות, ומבדילה בין אותיות גדולות לקטנות (case-sensitive). כמו ברוב שפות התסריט טיפוסי השפה מקושרים לערכים ולא למשתנים, טיפוס משתנה X יכול להפוך במהלך הריצה ממספר למחרוזת לפי ההשמה.
השפה מבוססת "תכנות מונחה דגמי אב" (Prototypes), שהוא סוג (לא נפוץ) של תכנות מונחה־עצמים. השפה בעיקרה היא שפה מבוססת אובייקטים (אפילו טיפוס בוליאני [Boolean] הוא למעשה אובייקט). האובייקטים בשפה הם מערכים אסוציאטיביים. תכנות מונחה עצמים אפשרי על ידי הגדרת מחלקה (class) החל מגרסה ES6, או באמצעות יצירת אובייקט והצמדת מאפיינים אליו (בגרסה ES5 ומטה). כל מאפיין באובייקט יכול לתפקד כמשתנה או פונקציה.
ישנם שלושה סוגי אובייקטים: אובייקטים של השפה כמו משתנים (כמו אובייקט תאריכי Date ואובייקט מחרוזתי), אובייקטים של הדפדפן (כמו אובייקטי window ו־document), ואובייקטים שיוצר המשתמש. אובייקטים של הדפדפן אינם נתמכים בגרסאות הערות במיטה שאינה דפדפן (כגון nodeJS) אלה אם כן משתמשים בספריות או חבילות מסוימות הנועדו לתת לקוד עוד פונקציות כדי לבנות (לדוגמה): אפליקציות לשולחן העבודה, אפליקציות לטלפון, משחקים מסובכים (משחקי תלת-מימד לדוגמה), סימולציות ועוד. . השפה תומכת בהרחבת מתודות של אובייקטים טבעיים בשפה כמו מחרוזות או Date באמצעות Prototyping.
השפה היא גם שפה מונחית־אירועים (Events), כך שמהלך ריצת התוכנית מבוסס על אירועים שמתרחשים בזמן ביצועה. לכל אובייקט קיים אוסף אירועים הייחודי לו, והדרך הנפוצה היא לכרוך פונקציות של המשתמש עם אירוע של אובייקט מובנה. להלן רשימה חלקית של האירועים:
השפה תומכת בתכנות פונקציונלי. פונקציה בשפה היא אזרחית ממחלקה ראשונה, ולמעשה כל פונקציה היא אובייקט בעצמה. השפה מאפשרת השמה של פונקציות למשתנים, העברה של פונקציה כארגומנט, והגדרת פונקציות אנונימיות. השפה מתממשקת באופן טבעי עם ממשק DOM, המייצג מסמכי HTML ו־XML תוך שימוש במתודולוגיה של תכנות מונחה־עצמים. לשפה תמיכה מובנית בביטוי רגולרי.
דוגמה לתוכנית JavaScript.
התוכנית המופיעה להלן כתובה בשפת JavaScript, והיא בודקת האם מספר שהועבר אליה הוא מספר ראשוני. הסימן "//" מציין שהטקסט שמימינו אינו חלק מקוד התוכנית, אלא הוא הערה שמטרתה להסביר את התוכנית למתכנת הקורא אותה. התוכנית מחולקת לשתי פונקציות, האחת בודקת האם מספר נתון הוא ראשוני, והשנייה מטפלת בדיאלוג עם המשתמש: קבלת המספר לבדיקה (קלט) והצגת תוצאות הבדיקה (פלט).
&lt;input type="text" id="primetest" value="" /&gt;
&lt;input type="button" onClick="communicate()" value="Check" /&gt;
&lt;script type="text/javascript"&gt;
function get_factor(n)
let sr = Math.sqrt(n)
// try to find a factor that is not 1.
for (let i=2; i&lt;=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()
let i = document.getElementById("primetest").value; // get checked number, using DOM.
// is it a valid input?
if ( isNaN(i) || (i &lt;= 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")
alert(i + " is not a prime, " + i + "=" + i/factor +"x"+ factor)
} // End of communication function
&lt;/script&gt;
אבטחה בתוכניות JavaScript.
מאחר ש-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 זכתה להרבה ספריות ומהדרים, מלבד השימוש כשפת תכנות וחישוב ובניית קוד פשוט להרצה בדפדפן [הנקרא ונילה], המאפשרים לבנות בעזרתה יישומים שונים. רוב היישומים נבנים בNode.js אך לפעמים מהודרים לקוד JavaScript רגיל על מנת להריץ אותם בדפדפנים.
לעבודה קלה עם ה-DOM מוכרת הספרייה jQuery.
לבניית אפליקציות web front-end מוכרות הספריות Angular, React, Vue.js, ו־Svelte.
לבניית אפליקציות למכשירים המריצים אנדרואיד וiOS מוכרות הספריות ReactNative, וNativeScript שמהדרות קוד המתבסס על React וAngular בהתאמה לקוד הנקרא נייטיבי, כלומר אפליקציות הנראות כאילו נכתבו בשפות הנייטיביות לכל פלטפורמה, Java עבור אנדרואיד, וObjective-C עבור iOS. לעומתן מוכרת גם הספרייה ionic שמהדרת את ה-JavaScript לאפליקצייות היברידיות, הממנפות את הקוד לבניית תוכנות הנראות רגילות אך למעשה מבוססות web גם בזמן הריצה. תוכנות אלה עדיין מקבלות גישה לכלים השמורים ליישומונים נייטיביים כמו שימוש במצלמה. ספריות אלה לרוב מבוססות על תחביר הדומה ל-HTML.
לבניית שרתי אינטרנט הפועלים בצורה א-סינכרונית ומבוססים על ניתוב, מוכרת הספרייה Express.js. ספרייה זו אינה מבוססת על HTML כברירת מחדל, אלא רק על JavaScript לבניית API מבוסס JSON לדוגמה, אך למעשה היא יכולה להגיש כל דבר, החל מקבצים וכלה בHTMl בו מוזרק מידע. היא עושה שימוש בפרוטוקלי HTTP על מנת להעביר מידע מהלקוח ובחזרה.
לבניית תוכנות למחשבים עם מערכת הפעלה Windows, macOs, או לינוקס מוכרת הספרייה Electron שמאחורי הקלעים מתקינה סביבת ריצה ייעודית הנקראת כרומיום (שהיא גם הליבה של גוגל כרום) ומציגה דפי אינטרנט בתוכנות מחשב רגילות המקבלות גם גישה לפונקציות השמורות לתוכנות בלבד כמו שליטה מלאה על הקבצים ואפשרות התקנה.
ייבוא קובצי JS.
ניתן לייבא סקריפט מתוך קובץ, במקום לכתוב הכל בדף HTML, באמצעות הפרמטר src (קיצור של source) בתגית script.
דוגמה:
&lt;script type="text/javascript" src="filename.js"&gt;&lt;/script&gt;
כאשר filename.js הוא קובץ ה אליו מפנים.
קובץ ה־ מכיל את כל הפקודות המופיעות בתוך התגית &lt;script&gt; ושהדפדפן יריץ.
כמו כן, קובץ JavaScipt יכול לייבא קבצים נוספים שאינם מוצהרים במסמך ה־HTML בצורתו ההתחלתית. לדוגמה:
let myScript = document.createElement("script"); // יצירת אלמנט סקריפט חדש
myScript.type = "text/javascript"; // קביעת סוג הסקריפט
myScript.src = "filename.js"; // קביעת הקובץ שיש לייבא
document.head.appendChild(myScript); // הכנסת האלמנט למסמך, על־מנת להריץ אותו
בדוגמה זו, ארבע שורות אלה, הכלולות באחד הסקריפטים הקיימים בדף, יוצרות אלמנט script חדש, המייבא את הקובץ "filename.js", ומוסיפות אותו למסמך ה־HTML (לסוף אלמנט ה־head של המסמך).
קונסטנטין הראשון, מלך סקוטלנד
קונסטנטין הראשון (Causantín mac Cináeda, 836–877) היה מלך סקוטלנד והפיקטים משנת 863 ועד מותו.
חייו.
קונסטנטין היה בנו של המלך קנת הראשון, וירש את הכתר הסקוטי לאחר מות דודו, דונלד הראשון.
במרבית שנות שלטונו נלחם קונסטנטין בויקינגים וניסה להרחיב את גבולות ממלכתו דרומה. ב-872, בעקבות התנקשות בגיסו ארתגאל, מלך סרת'קלייד, סופחה ממלכתו לסקוטלנד.
ב-864 פלשו לסקוטלנד אנשי צפון, שהונהגו על ידי אולאף הלבן מדבלין, אך קונסטנטין הצליח להביסם. פעם נוספת פלשו אנשי הצפון בהנהגת תורסטן האדום, אך הובסו שנית.
ב-877 נהרג קונסטנטין בקרב כנגד הוויקינגים, ב"מערה השחורה" שבפייף. אחיו אייד' ירש אותו לאחר מותו. לקונסטנטין היה גם בן בשם דונלד, שהפך למלך דונלד השני לאחר שלטונם של אייד' וגיריק.
המנון טורקמניסטן