דילוג לתוכן
JavaScript

JavaScript למתחילים: what is javascript, משתנים, פונקציות והדפדפן כסביבת ריצה

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

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

מה צריך להכין לפני שמתחילים

כדי להריץ את הדוגמאות במאמר, צריך מעט מאוד:

  • דפדפן מודרני כמו Chrome, Firefox, Edge או Safari.
  • עורך טקסט: VS Code, Kate, Notepad++, TextEdit במצב טקסט רגיל, או כל עורך אחר.
  • תיקייה במחשב שבה תשמרו קבצי תרגול.
  • יכולת לפתוח קובץ .html בדפדפן בלחיצה כפולה.

מומלץ ליצור תיקייה בשם javascript-beginner, ובתוכה לשמור כל דוגמה כקובץ נפרד. למשל: variables.html, functions.html, browser-events.html. אין צורך בשרת מקומי בשביל הדוגמאות הראשונות.

כדאי גם להכיר את כלי המפתחים של הדפדפן. ברוב הדפדפנים פותחים אותם עם F12 או עם קליק ימני על הדף ואז Inspect. בלשונית Console רואים הודעות, שגיאות ותוצאות של console.log.

what is javascript בפועל: מה הדפדפן עושה עם הקוד שלכם

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

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

לדוגמה, כשאתם כותבים:

  • document.querySelector("h1") — אתם מבקשים מהדפדפן למצוא כותרת בדף.
  • element.textContent = "שלום" — אתם משנים את הטקסט שמופיע על המסך.
  • button.addEventListener("click", ...) — אתם אומרים לדפדפן להריץ קוד כשמשתמש לוחץ על כפתור.

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

הדוגמה הראשונה: משתנים והדפסה למסך

ב-JavaScript מגדירים משתנים בעיקר עם const ו־let. כלל אצבע טוב:

  • השתמשו ב־const כשאתם לא מתכוונים להחליף את הערך.
  • השתמשו ב־let כשאתם כן מתכוונים לשנות את הערך בהמשך.
  • הימנעו מ־var בתחילת הדרך, כי ההתנהגות שלו פחות צפויה למתחילים.

שמרו את הקוד הבא בקובץ בשם variables.html ופתחו אותו בדפדפן:

html
<!doctype html>
<html lang="he" dir="rtl">
<head>
  <meta charset="utf-8">
  <title>JavaScript Variables</title>
</head>
<body>
  <h1>משתנים ב-JavaScript</h1>
  <p id="result"></p>

  <script>
    // Store values in variables
    const firstName = "Dana";
    let score = 7;

    // Update a value that can change
    score = score + 3;

    // Build a message
    const message = firstName + " has " + score + " points.";

    // Print to the console and to the page
    console.log(message);
    document.querySelector("#result").textContent = message;
  </script>
</body>
</html>

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

text
Dana has 10 points.

שימו לב להבדל בין firstName לבין score. השם נשאר קבוע ולכן הוגדר עם const. הניקוד משתנה ולכן הוגדר עם let. זו החלטה קטנה, אבל היא עוזרת לקרוא קוד ולהבין כוונה.

סוגי ערכים בסיסיים שכדאי להכיר

בשלב הראשון מספיק להכיר כמה סוגי ערכים נפוצים:

סוג דוגמה שימוש נפוץ
מחרוזת "hello" טקסט, שמות, הודעות
מספר 42 חישובים, מונים, מחירים, ציונים
בוליאני true או false בדיקות ותנאים
מערך ["red", "blue"] רשימות של ערכים
אובייקט { name: "Dana" } מידע בעל שדות

JavaScript היא שפה דינמית: לא כותבים מראש את סוג המשתנה, והסוג נקבע לפי הערך. זה נוח להתחלה, אבל גם מקור לטעויות. למשל, "5" + 2 נותן "52", כי אחד הערכים הוא טקסט. לעומת זאת, 5 + 2 נותן 7.

פונקציות: איך לארוז פעולה בשם ברור

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

שמרו את הקוד הבא כ־functions.html:

html
<!doctype html>
<html lang="he" dir="rtl">
<head>
  <meta charset="utf-8">
  <title>JavaScript Functions</title>
</head>
<body>
  <h1>פונקציות ב-JavaScript</h1>
  <p id="output"></p>

  <script>
    // Calculate a final price after adding tax
    function addTax(price, taxRate) {
      const tax = price * taxRate;
      return price + tax;
    }

    // Format a message for the page
    function buildMessage(productName, finalPrice) {
      return productName + " costs " + finalPrice.toFixed(2);
    }

    const price = addTax(100, 0.17);
    const message = buildMessage("Notebook", price);

    console.log(message);
    document.querySelector("#output").textContent = message;
  </script>
</body>
</html>

הפונקציה addTax מקבלת מחיר ושיעור מס, מחשבת את המחיר הסופי ומחזירה אותו עם return. הפונקציה buildMessage בונה טקסט להצגה. הפלט הצפוי הוא:

text
Notebook costs 117.00

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

הדפדפן כסביבת ריצה: אירועים, כפתורים ושינוי הדף

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

שמרו את הדוגמה הבאה בשם browser-events.html:

html
<!doctype html>
<html lang="he" dir="rtl">
<head>
  <meta charset="utf-8">
  <title>Browser Events</title>
</head>
<body>
  <h1>אירועים בדפדפן</h1>

  <label for="nameInput">שם:</label>
  <input id="nameInput" type="text" value="Dana">

  <button id="greetButton">הצג ברכה</button>

  <p id="greeting"></p>

  <script>
    // Create a greeting from a name
    function createGreeting(name) {
      return "Hello, " + name + "!";
    }

    const input = document.querySelector("#nameInput");
    const button = document.querySelector("#greetButton");
    const greeting = document.querySelector("#greeting");

    // Run this code when the button is clicked
    button.addEventListener("click", function () {
      const name = input.value.trim();
      const message = createGreeting(name);
      greeting.textContent = message;
      console.log(message);
    });
  </script>
</body>
</html>

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

text
Hello, Dana!

כאן רואים את JavaScript בתפקיד הטבעי שלה בדפדפן: לא רק חישוב, אלא תגובה לפעולות משתמש. querySelector מוצא אלמנטים בדף, addEventListener מחבר פעולה לאירוע, ו־textContent משנה את מה שמופיע למשתמש.

סדר עבודה מומלץ לתרגול

כדי ללמוד JavaScript בלי ללכת לאיבוד, כדאי לעבוד בסדר הבא:

  1. כתבו קובץ קטן אחד בלבד בכל פעם.
  2. פתחו אותו בדפדפן ובדקו שהעמוד נטען.
  3. פתחו את Console והשאירו אותו פתוח.
  4. הוסיפו console.log אחרי כל שלב חשוב.
  5. שנו ערך אחד ובדקו מה השתנה בפלט.
  6. רק אחרי שהכול עובד, עברו לדוגמה הבאה.

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

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

טעויות נפוצות והודעות שגיאה אמיתיות

Uncaught ReferenceError: name is not defined

השגיאה הזו אומרת שניסיתם להשתמש בשם משתנה שלא קיים באזור שבו הקוד רץ. למשל:

html
<!doctype html>
<html lang="he" dir="rtl">
<head>
  <meta charset="utf-8">
  <title>Reference Error Example</title>
</head>
<body>
  <script>
    // This variable has a different name
    const userName = "Dana";

    console.log(username);
  </script>
</body>
</html>

כאן הוגדר userName, אבל הודפס username. JavaScript רגישה לאותיות גדולות וקטנות, ולכן אלה שני שמות שונים. התיקון הוא להשתמש באותו שם בדיוק:

javascript
console.log(userName);

Uncaught TypeError: Cannot set properties of null

השגיאה הזו מופיעה כש־querySelector לא מצא אלמנט, ולכן החזיר null. לאחר מכן ניסיתם לשנות עליו מאפיין.

דוגמה נפוצה:

html
<!doctype html>
<html lang="he" dir="rtl">
<head>
  <meta charset="utf-8">
  <title>Null Element Example</title>
</head>
<body>
  <p id="message"></p>

  <script>
    // The selector does not match the existing id
    const box = document.querySelector("#mesage");
    box.textContent = "Hello";
  </script>
</body>
</html>

הבעיה היא שגיאת כתיב: בדף יש id="message", אבל בקוד נכתב #mesage. מתקנים את הסלקטור:

javascript
const box = document.querySelector("#message");
box.textContent = "Hello";

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

Uncaught SyntaxError: Unexpected token

זו שגיאת תחביר. בדרך כלל חסר סוגר, מירכאות, פסיק או תו אחר. למשל:

html
<!doctype html>
<html lang="he" dir="rtl">
<head>
  <meta charset="utf-8">
  <title>Syntax Error Example</title>
</head>
<body>
  <script>
    // A closing quote is missing
    const message = "Hello;

    console.log(message);
  </script>
</body>
</html>

כאן חסרה מירכאה סוגרת אחרי Hello. התיקון:

javascript
const message = "Hello";

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

איך לחשוב על const, let ו־return

שלושה מושגים חוזרים כמעט בכל קוד JavaScript בסיסי:

  • const — “השם הזה מצביע לערך שלא אחליף”. באובייקטים ומערכים אפשר עדיין לשנות תוכן פנימי, אבל לא להצביע לערך חדש.
  • let — “הערך הזה עשוי להשתנות”. מתאים למונים, תוצאות ביניים וערכים שמתעדכנים בעקבות פעולה.
  • return — “זו התוצאה שהפונקציה מחזירה למי שקרא לה”. בלי return, פונקציה מחזירה בדרך כלל undefined.

הבחירה בין const ל־let אינה רק טכנית. היא מסמנת לקורא הקוד מה צפוי להשתנות ומה לא. בקוד קטן זה נראה שולי, אבל בקוד אמיתי זה חוסך בלבול.

תרגילים קצרים להמשך

אחרי שהרצתם את שלוש הדוגמאות, נסו לשנות אותן:

  • בדוגמת המשתנים: הוסיפו משתנה level והציגו אותו בהודעה.
  • בדוגמת הפונקציות: כתבו פונקציה בשם discountPrice שמקבלת מחיר ואחוז הנחה.
  • בדוגמת האירועים: אם תיבת השם ריקה, הציגו Hello, guest!.
  • הוסיפו עוד כפתור שמנקה את הטקסט מתוך הפסקה.

תרגיל טוב במיוחד הוא לקחת את הדוגמה השלישית ולהוסיף בדיקה:

html
<!doctype html>
<html lang="he" dir="rtl">
<head>
  <meta charset="utf-8">
  <title>Greeting With Default</title>
</head>
<body>
  <h1>ברכה עם ברירת מחדל</h1>

  <input id="nameInput" type="text" placeholder="הקלידו שם">
  <button id="greetButton">ברכה</button>
  <p id="greeting"></p>

  <script>
    // Return a default name when the input is empty
    function normalizeName(value) {
      const trimmed = value.trim();

      if (trimmed === "") {
        return "guest";
      }

      return trimmed;
    }

    function createGreeting(name) {
      return "Hello, " + name + "!";
    }

    const input = document.querySelector("#nameInput");
    const button = document.querySelector("#greetButton");
    const greeting = document.querySelector("#greeting");

    button.addEventListener("click", function () {
      const name = normalizeName(input.value);
      const message = createGreeting(name);

      greeting.textContent = message;
      console.log(message);
    });
  </script>
</body>
</html>

אם תיבת הטקסט ריקה ולוחצים על הכפתור, הפלט יהיה:

text
Hello, guest!

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

לאן ממשיכים מכאן

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

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