משתנים וטיפוסי נתונים
מה זה משתנה?
משתנה הוא כמו קופסה עם שם שמאחסנת מידע. אפשר לשים בה ערך, לקרוא אותו, ולשנות אותו.
// יצירת משתנה בשם "age" עם הערך 25
let age = 25;
// קריאת הערך
console.log(age); // 25
// שינוי הערך
age = 26;
console.log(age); // 26
שלוש דרכים להכריז על משתנה
let - משתנה ניתן לשינוי
let name = "דן";
name = "דנה"; // ✅ מותר לשנות
console.log(name); // "דנה"
const - קבוע (לא ניתן לשינוי)
const PI = 3.14159;
PI = 3.14; // ❌ שגיאה! אי אפשר לשנות const
const API_URL = "https://api.example.com";
var - הדרך הישנה (לא מומלץ)
var oldWay = "לא מומלץ להשתמש";
// var יש לו בעיות עם scope, עדיף let
ההבדלים בין let, const ו-var
| תכונה | let | const | var |
|---|---|---|---|
| שינוי ערך | ✅ כן | ❌ לא | ✅ כן |
| Block scope | ✅ כן | ✅ כן | ❌ לא |
| Hoisting | ❌ לא זמין | ❌ לא זמין | ✅ זמין (undefined) |
| הכרזה מחדש | ❌ לא | ❌ לא | ✅ כן |
דוגמה ל-Block Scope
if (true) {
let x = 10;
var y = 20;
}
console.log(y); // 20 - var נגיש מחוץ לבלוק
console.log(x); // ❌ שגיאה! let לא נגיש מחוץ לבלוק
💡 כלל אצבע: השתמשו ב-
constכברירת מחדל. השתמשו ב-letרק כשצריך לשנות את הערך.
כללים לשמות משתנים
מה מותר?
let name = "דן"; // ✅ אותיות
let age2 = 25; // ✅ ספרות (לא בהתחלה)
let first_name = "דן"; // ✅ קו תחתון
let $price = 100; // ✅ סימן דולר
let _private = "סודי"; // ✅ קו תחתון בהתחלה
מה אסור?
let 2name = "דן"; // ❌ מתחיל בספרה
let my-name = "דן"; // ❌ מקף
let my name = "דן"; // ❌ רווח
let for = "דן"; // ❌ מילה שמורה
מוסכמות שמות (Naming Conventions)
// camelCase - הכי נפוץ ב-JavaScript
let firstName = "דן";
let totalAmount = 100;
let isLoggedIn = true;
// SCREAMING_SNAKE_CASE - לקבועים
const MAX_SIZE = 100;
const API_KEY = "abc123";
// PascalCase - לclass וcomponents
class UserProfile { }
function UserCard() { }
טיפוסי נתונים פרימיטיביים (Primitives)
JavaScript מכילה 7 טיפוסים פרימיטיביים:
1. String - מחרוזת
let name = "דן"; // גרשיים כפולות
let city = 'תל אביב'; // גרש בודד
let greeting = `שלום ${name}`; // template literal
console.log(greeting); // "שלום דן"
2. Number - מספר
let age = 25; // מספר שלם
let price = 19.99; // מספר עשרוני
let negative = -10; // מספר שלילי
let big = 1000000; // מספר גדול
let scientific = 2.5e6; // 2,500,000 (כתיב מדעי)
// ערכים מיוחדים
let infinity = Infinity;
let notANumber = NaN; // Not a Number
3. Boolean - ערך אמת/שקר
let isActive = true;
let isLoggedIn = false;
// תוצאות של השוואות
let isAdult = age >= 18; // true
let isEmpty = name === ""; // false
4. undefined - לא מוגדר
let x;
console.log(x); // undefined
// משתנה שהוכרז אבל לא קיבל ערך
let user;
console.log(user); // undefined
5. null - ריק במכוון
let user = null; // אין משתמש כרגע
// ההבדל מ-undefined:
// undefined = לא הוגדר
// null = הוגדר במכוון כריק
6. Symbol - ייחודי
let id1 = Symbol("id");
let id2 = Symbol("id");
console.log(id1 === id2); // false - כל Symbol ייחודי
7. BigInt - מספרים גדולים מאוד
let bigNumber = 9007199254740991n;
let anotherBig = BigInt("12345678901234567890");
typeof - בדיקת סוג
האופרטור typeof מחזיר את סוג המשתנה:
console.log(typeof "שלום"); // "string"
console.log(typeof 42); // "number"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (באג היסטורי!)
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function(){}); // "function"
המרות בין סוגים (Type Conversion)
המרה למחרוזת
let num = 42;
let str = String(num); // "42"
let str2 = num.toString(); // "42"
let str3 = num + ""; // "42" (טריק)
המרה למספר
let str = "42";
let num = Number(str); // 42
let num2 = parseInt(str); // 42 (שלם)
let num3 = parseFloat("3.14"); // 3.14 (עשרוני)
let num4 = +str; // 42 (טריק)
// מקרים מיוחדים
Number("abc"); // NaN
Number(""); // 0
Number(true); // 1
Number(false); // 0
Number(null); // 0
Number(undefined); // NaN
המרה לבוליאני
Boolean(1); // true
Boolean(0); // false
Boolean("שלום"); // true
Boolean(""); // false
Boolean(null); // false
Boolean(undefined); // false
// ערכים שהם false (falsy):
// 0, "", null, undefined, NaN, false
// כל השאר הם true (truthy)
חיבור מחרוזות (String Concatenation)
let first = "שלום";
let last = "עולם";
// שיטה 1: אופרטור +
let full = first + " " + last; // "שלום עולם"
// שיטה 2: Template Literals (מומלץ!)
let message = `${first} ${last}!`; // "שלום עולם!"
// שימוש מתקדם ב-template literals
let name = "דן";
let age = 25;
let intro = `שמי ${name}.
אני בן ${age}.
בעוד 5 שנים אהיה בן ${age + 5}.`;
עבודה עם מחרוזות
let text = "שלום עולם";
// אורך
console.log(text.length); // 9
// גישה לתו (0-indexed)
console.log(text[0]); // "ש"
console.log(text.charAt(0)); // "ש"
// מציאת מיקום
console.log(text.indexOf("עולם")); // 5
// חיתוך
console.log(text.slice(0, 4)); // "שלום"
console.log(text.substring(5)); // "עולם"
// שינוי אותיות
let eng = "Hello";
console.log(eng.toUpperCase()); // "HELLO"
console.log(eng.toLowerCase()); // "hello"
// החלפה
console.log(text.replace("עולם", "JavaScript")); // "שלום JavaScript"
// פיצול
console.log("א,ב,ג".split(",")); // ["א", "ב", "ג"]
// הסרת רווחים
console.log(" שלום ".trim()); // "שלום"
סיכום
| טיפוס | דוגמה | typeof |
|---|---|---|
| String | "שלום" |
"string" |
| Number | 42, 3.14 |
"number" |
| Boolean | true, false |
"boolean" |
| undefined | undefined |
"undefined" |
| null | null |
"object" |
| Symbol | Symbol() |
"symbol" |
| BigInt | 123n |
"bigint" |
כללי אצבע:
- השתמשו ב-const כברירת מחדל
- השתמשו ב-let רק כשצריך לשנות
- הימנעו מ-var
- השתמשו ב-template literals למחרוזות
לחזרה ותרגול חי: הנושא הזה מופיע גם
במדריך האינטראקטיבי ל-JavaScript, עם עורך קוד שמראה את התוצאה מיד.
בדקו את עצמכם
נסו לענות לבד לפני שאתם פותחים את התשובה.
-
מתי משתמשים ב-
const?הצגת התשובה
תשובה ג. const כברירת מחדל, let רק כשצריך לשנות, ו-var לא בכלל.
-
const user = { name: 'דנה' }; user.name = 'יוסי';מה יקרה?הצגת התשובה
תשובה א. המשתנה עדיין מצביע על אותו אובייקט. רק user = {...} אסור.
-
מה מחזיר
typeof null?הצגת התשובה
תשובה ג. באג היסטורי בשפה שנשאר לתאימות. בודקים null עם === null.