אופרטורים

אופרטורים הם סמלים שמבצעים פעולות על ערכים. JavaScript מכילה מגוון רחב של אופרטורים.


אופרטורים אריתמטיים (Arithmetic)

פעולות מתמטיות בסיסיות:

let a = 10;
let b = 3;

console.log(a + b);   // 13 - חיבור
console.log(a - b);   // 7  - חיסור
console.log(a * b);   // 30 - כפל
console.log(a / b);   // 3.333... - חילוק
console.log(a % b);   // 1  - שארית (modulo)
console.log(a ** b);  // 1000 - חזקה (10³)

חיבור עם מחרוזות

console.log("שלום" + " " + "עולם");  // "שלום עולם"
console.log("מספר: " + 5);           // "מספר: 5"
console.log(5 + "5");                 // "55" (מחרוזת!)
console.log(5 - "2");                 // 3 (מספר!)

⚠️ זהירות: חיבור עם מחרוזת הופך הכל למחרוזת!


אופרטורי השמה (Assignment)

let x = 10;        // השמה בסיסית

x += 5;            // x = x + 5  → 15
x -= 3;            // x = x - 3  → 12
x *= 2;            // x = x * 2  → 24
x /= 4;            // x = x / 4  → 6
x %= 4;            // x = x % 4  → 2
x **= 3;           // x = x ** 3 → 8

טבלת אופרטורי השמה

אופרטור דוגמה שקול ל
= x = 5 x = 5
+= x += 5 x = x + 5
-= x -= 5 x = x - 5
*= x *= 5 x = x * 5
/= x /= 5 x = x / 5
%= x %= 5 x = x % 5
**= x **= 5 x = x ** 5

אופרטורי הגדלה והקטנה (Increment/Decrement)

let count = 5;

count++;           // count = count + 1 → 6
count--;           // count = count - 1 → 5

// ההבדל בין prefix ל-postfix
let a = 5;
console.log(a++);  // 5 (מחזיר ואז מגדיל)
console.log(a);    // 6

let b = 5;
console.log(++b);  // 6 (מגדיל ואז מחזיר)
console.log(b);    // 6

אופרטורי השוואה (Comparison)

מחזירים true או false:

let a = 5;
let b = "5";

// השוואת ערך בלבד (עם המרה)
console.log(a == b);   // true (5 == "5")
console.log(a != b);   // false

// השוואה מדויקת (ערך וסוג)
console.log(a === b);  // false (מספר ≠ מחרוזת)
console.log(a !== b);  // true

// השוואות נוספות
console.log(5 > 3);    // true - גדול מ
console.log(5 < 3);    // false - קטן מ
console.log(5 >= 5);   // true - גדול או שווה
console.log(5 <= 4);   // false - קטן או שווה

== לעומת === (חשוב!)

// == - השוואה רופפת (עם המרת סוג)
console.log(5 == "5");     // true
console.log(0 == false);   // true
console.log(null == undefined); // true

// === - השוואה מדויקת (מומלץ!)
console.log(5 === "5");    // false
console.log(0 === false);  // false
console.log(null === undefined); // false

💡 המלצה: תמיד השתמשו ב-=== ו-!== למניעת באגים.


אופרטורים לוגיים (Logical)

&& - וגם (AND)

// מחזיר true רק אם שניהם true
console.log(true && true);   // true
console.log(true && false);  // false
console.log(false && true);  // false
console.log(false && false); // false

// דוגמה מעשית
let age = 25;
let hasLicense = true;
let canDrive = age >= 18 && hasLicense;  // true

|| - או (OR)

// מחזיר true אם לפחות אחד true
console.log(true || true);   // true
console.log(true || false);  // true
console.log(false || true);  // true
console.log(false || false); // false

// דוגמה מעשית
let isWeekend = true;
let isHoliday = false;
let dayOff = isWeekend || isHoliday;  // true

! - לא (NOT)

// הופך את הערך
console.log(!true);   // false
console.log(!false);  // true
console.log(!0);      // true
console.log(!"");     // true
console.log(!"שלום"); // false

// שימוש כפול להמרה לבוליאני
console.log(!!"שלום"); // true
console.log(!!0);      // false

?? - Nullish Coalescing

// מחזיר את הערך הימני רק אם השמאלי null או undefined
let name = null;
console.log(name ?? "אנונימי");  // "אנונימי"

let age = 0;
console.log(age ?? 18);  // 0 (לא null/undefined)
console.log(age || 18);  // 18 (0 הוא falsy!)

אופרטור טרנרי (Ternary)

קיצור ל-if/else בשורה אחת:

// תחביר: condition ? valueIfTrue : valueIfFalse

let age = 20;
let status = age >= 18 ? "בגיר" : "קטין";
console.log(status);  // "בגיר"

// דוגמאות נוספות
let score = 75;
let grade = score >= 90 ? "מצוין" :
            score >= 70 ? "טוב" :
            score >= 55 ? "מספיק" : "נכשל";
console.log(grade);  // "טוב"

// שימוש בפונקציות
function greet(name) {
    return name ? `שלום ${name}` : "שלום אורח";
}

אופרטורי מחרוזת

// חיבור מחרוזות
let first = "שלום";
let second = "עולם";
let full = first + " " + second;  // "שלום עולם"

// קיצור השמה
let text = "שלום";
text += " עולם";  // "שלום עולם"

// template literals
let name = "דן";
let greeting = `שלום ${name}!`;  // "שלום דן!"

אופרטור typeof

בודק את סוג הערך:

console.log(typeof 42);           // "number"
console.log(typeof "שלום");       // "string"
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"

סדר קדימויות (Operator Precedence)

כמו במתמטיקה, יש סדר לביצוע פעולות:

// כפל לפני חיבור
console.log(2 + 3 * 4);     // 14 (לא 20)
console.log((2 + 3) * 4);   // 20

// סדר הקדימויות (מהגבוה לנמוך):
// 1. () - סוגריים
// 2. ** - חזקה
// 3. *, /, % - כפל, חילוק, שארית
// 4. +, - - חיבור, חיסור
// 5. <, >, <=, >= - השוואות
// 6. ==, ===, !=, !== - שוויון
// 7. && - וגם
// 8. || - או
// 9. = - השמה

💡 טיפ: כשיש ספק, השתמשו בסוגריים לבהירות.


דוגמאות מעשיות

חישוב מחיר עם הנחה

let price = 100;
let discount = 20;  // אחוז
let finalPrice = price - (price * discount / 100);
console.log(finalPrice);  // 80

בדיקת גיל לאתר

let age = 16;
let hasParentPermission = true;
let canEnter = age >= 18 || (age >= 13 && hasParentPermission);
console.log(canEnter);  // true

חישוב ממוצע

let scores = [85, 90, 78, 92, 88];
let sum = scores[0] + scores[1] + scores[2] + scores[3] + scores[4];
let average = sum / scores.length;
console.log(average);  // 86.6

סיכום

סוג אופרטורים
אריתמטי + - * / % **
השמה = += -= *= /= %=
השוואה == === != !== > < >= <=
לוגי && \|\| ! ??
טרנרי ? :
סוג typeof
הגדלה/הקטנה ++ --

כללי אצבע: - השתמשו ב-=== במקום == - השתמשו ב-?? לבדיקת null/undefined - השתמשו בסוגריים לבהירות

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה ההבדל בין == ל-===?

    1. === רק למספרים
    2. אין הבדל
    3. === משווה גם טיפוס, == ממיר טיפוסים קודם
    4. == מחמיר יותר
    הצגת התשובה

    תשובה ג. '5' == 5 הוא true, אבל '5' === 5 הוא false. משתמשים תמיד ב-===.

  2. מה מחזיר null ?? 'ברירת מחדל'?

    1. null
    2. undefined
    3. 'ברירת מחדל'
    4. false
    הצגת התשובה

    תשובה ג. ?? מחזיר את הצד הימני רק כשהשמאלי null או undefined.

  3. מה ההבדל בין 0 || 5 ל-0 ?? 5?

    1. שניהם 5
    2. שניהם שגיאה
    3. שניהם 0
    4. || נותן 5 (כי 0 falsy), ?? נותן 0 (כי 0 לא null)
    הצגת התשובה

    תשובה ד. || מתעלם מכל ערך falsy, ?? רק מ-null ו-undefined. לכן ?? בטוח יותר עבור 0 ומחרוזת ריקה.