אופרטורים להשוואה משווים בין הערכים של שני אופרטנדים ומעריכים אם ההצהרה שהם יוצרים היא true
או false
. בדוגמה הבאה נעשה שימוש באופרטור השוויון המחמיר (===
) כדי להשוות בין שני אופרטנדים: הביטוי 2 + 2
והערך 4
. מכיוון שהתוצאה של הביטוי זהה לערך המספרי 4
, הערך של הביטוי הזה הוא true
:
2 + 2 === 4
> true
כפייה של סוגים ושוויון
שניים מהאופרטורים הנפוצים ביותר להשוואה הם ==
לשוויון רופף
ו-===
לשוויון קפדני. הפונקציה ==
מבצעת השוואה לא מחמירה בין שני ערכים על ידי אילוץ של אופרטנדים לסוגי נתונים תואמים, אם אפשר. לדוגמה, הפונקציה 2 == "2"
מחזירה את הערך true
, למרות שההשוואה מתבצעת בין ערך מספרי לערך מחרוזת.
2 == 2
> true
2 == "2"
> true
אותו הדבר נכון לגבי !=
, שמחזירה את הערך true
רק אם אין שוויון רופף בין שני אופרטנדים שנערכת ביניהם השוואה.
2 != 3
> true
2 != "2"
> false
בהשוואות מחמירות באמצעות ===
או !==
לא מתבצעת כפייה של סוגים. כדי שההשוואה המחמירה תתקבל הערך true
, הערכים להשוואה צריכים להיות מאותו סוג נתונים. לכן, הפונקציה 2 == "2"
מחזירה את הערך true
, אבל הפונקציה 2 === "2"
מחזירה את הערך false
:
2 === 3
> false
2 === "2"
> false
כדי למנוע אי-בהירות שעלולה לנבוע מכוונון אוטומטי, מומלץ להשתמש ב-===
בכל הזדמנות אפשרית.
מפעיל | תיאור | שימוש | תוצאה |
---|---|---|---|
=== | שווה באופן מוחלט | 2 === 2 | TRUE |
!== | לא זהה | 2 !== "2" | TRUE |
== | שווה (או 'שווה באופן כללי') | 2 == "2" | TRUE |
=! | לא שווה | 2 != "3" | TRUE |
> | גדול מ- | 3 > 2 | TRUE |
>= | גדול מ- או שווה ל- | 2 >= 2 | TRUE |
< | פחות מ- | 2 < 3 | TRUE |
<= | פחות מ- או שווה ל- | 2 <= 3 | TRUE |
ערכים אמיתיים וערכים שקריים
כל הערכים ב-JavaScript הם true
או false
באופן משתמע, וניתן לאלץ אותם להפוך לערך הבוליאני התואם – לדוגמה, באמצעות המנגנון להשוואה 'שווה באופן רופף'. קבוצה מוגבלת של ערכים מומרת ל-false
:
0
null
undefined
NaN
- מחרוזת ריקה (
""
)
כל שאר הערכים יכופו לערך true
, כולל כל מחרוזת שמכילה תו אחד או יותר וכל מספר שאינו אפס. הערכים האלה נקראים בדרך כלל 'ערכים אמיתיים' ו'ערכים שקריים'.
"My string" == true
> true
100 == true
> true
0 == true
> false
אופרטורים לוגיים
אפשר להשתמש באופרטורים הלוגיים AND (&&
), OR (||
) ו-NOT (!
) כדי לשלוט בזרימה של סקריפט על סמך הערכה של שתי הצהרות מותנות או יותר:
2 === 3 || 5 === 5;
> true
2 === 2 && 2 === "2"
> false
2 === 2 && !"My string."
> false
ביטוי לוגיקלי של NOT (!
) מבטל את הערך האמיתי או הכוזב של אופרטנד, והתוצאה שלו היא true
אם הערך של האופרטור הוא false
, ו-false
אם הערך של האופרטור הוא true
:
true
> true
!true
> false
!false
> true
שימוש באופרטור הלוגי NOT (!
) לפני סוג נתונים אחר, כמו מספר או מחרוזת, מאלץ את הערך הזה להיות בוליאני ומשנה את הערך האמיתי או הכוזב של התוצאה.
"string"
> "string"
!"string"
> false
0
> 0
!0
> true
מקובל להשתמש בשני אופרטורים של NOT כדי לאלץ את הנתונים במהירות לערך הבוליאני התואם:
!!"string"
> true
!!0
> false
האופרטורים הלוגי AND ו-OR לא מבצעים כפייה בעצמם. הן מחזירות את הערך של אחד משני המשתנים שנערכים, והמשתנה שנבחר נקבע לפי הערכה הזו.
הפונקציה AND לוגית (&&
) מחזירה את הראשון משני המשתנים שלה רק אם הערך של המשתנה הזה הוא false
, ואת המשתנה השני במקרים אחרים. בהשוואות שמתקבל בהן ערך בוליאני, הפונקציה מחזירה את הערך true
רק אם ערכם של שני האופרטנדים משני צידי ה-AND הלוגי הוא true
. אם אחד מהצדדים מקבל את הערך false
, הפונקציה מחזירה את הערך false
.
true && false
> false
false && true
> false
false && false
> false
true && true
> true
כשמשתמשים ב-&&
עם שני אופרטורים לא בוליאניים, האופרטור הראשון מוחזר ללא שינוי אם אפשר לאלץ אותו להיות false
. אם אפשר לאלץ את המשתנה הראשון להיות true
, המשתנה השני מוחזר ללא שינוי:
false && "My string"
> false
null && "My string"
> null
"My string" && false
> false
"My string" && "My second string"
> "My second string"
2 === 2 && "My string"
> "My string"
האופרטור הלוגי OR (||
) מחזיר את הראשון משני המשתנים שלו רק אם המשתנה הזה מקבל את הערך true
, ואת המשתנה השני במקרים אחרים. בהשוואות שמתקבלות בהן ערכים בוליאניים, הפונקציה מחזירה את הערך true
אם אחד מהאופרטורים מקבל את הערך true
, ואם אף אחד מהצדדים לא מקבל את הערך true
, הפונקציה מחזירה את הערך false
:
true || false
> true
false || true
> true
true || true
> true
false || false
> false
כשמשתמשים ב-||
עם שני אופרטורים לא בוליאניים, הפונקציה מחזירה את האופרטור הראשון ללא שינוי אם ניתן לאלץ אותו ל-true
. אם אפשר לאלץ את המשתנה הראשון להיות false
, המשתנה השני מוחזר ללא שינוי:
false || "My string"
> "My string"
null || "My string"
> "My string"
"My string" || false
> "My string"
"My string" || "My second string"
> "My string"
2 === 2 || "My string"
> true
אופרטור coalescing של Nullish
האופרטור 'nullish coalescing operator' (??
) נוסף ב-ES2020, והוא מחזיר את האופרטנד הראשון רק אם לאותו אופרטנד יש ערך שאינו null
או undefined
. אחרת, הפונקציה מחזירה את המשתנה השני.
null ?? "My string"
> "My string"
undefined ?? "My string"
> "My string"
true ?? "My string";
> true
הפונקציה ??
דומה ל-OR לוגי, אבל האופן שבו האופרטנד הראשון מוערך הוא מחמיר יותר. הפונקציה ||
מחזירה את המשתנה השני של כל ביטוי שאפשר לאלץ ל-false
, כולל undefined
ו-null
. הפונקציה ??
מחזירה את המשתנה השני רק אם המשתנה הראשון שווה ל-null
או ל-undefined
, גם אם אפשר לאלץ אותו להיות false
:
0 ?? "My string";
> 0
false ?? "My string";
> false
undefined ?? "My string";
> "My string"
אופרטורים לוגיים להקצאה
משתמשים באופרטור הקצאה כדי להקצות את הערך של אופרטור שני לאופרטור הראשון. הדוגמה הנפוצה ביותר לכך היא סימן שוויון יחיד (=
), שמשמש להקצאת ערך למשתנה שהוצהר.
משתמשים באופרטור הקצאה לוגי כדי להקצות ערך למשתנה באופן מותנה, בהתאם לערך האמיתי או השקרי של המשתנה.
האופרטור של הקצאה לוגית AND (&&=
) מעריך את האופרטנד השני ומקצה אותו לאופרטנד הראשון רק אם הערך של האופרטנד הראשון יהיה true
. כלומר, "אם האופרטנד הראשון נכון, מקצים לו את הערך של האופרטנד השני במקום זאת:"
let myVariable = false;
myVariable &&= 2 + 2;
> false
myVariable = true;
myVariable &&= 2 + 2;
> 4
הערך האמיתי או הכוזב של המשתנה הראשון קובע אם מתבצעת הקצאה. עם זאת, ניסיון להעריך את המשתנה הראשון באמצעות אופרטור השוואה גורם ליצירת ערך בוליאני מסוג true
או false
, שלא ניתן להקצות לו ערך:
let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment
אופרטור ההקצאה של או"ר לוגי (||=
) מעריך את האופרטנד השני ומקצה אותו לאופרטנד הראשון אם הערך של האופרטנד הראשון הוא false
– כלומר, "אם האופרטנד הראשון הוא false, מקצים לו את הערך של האופרטנד השני במקום זאת:"
let myVariable = false;
myVariable ||= 2 + 2;
> 4
myVariable = true;
myVariable ||= 2 + 2;
> true
בדיקת ההבנה
איזה אופרטור מציין 'שווה בהחלט'?
===
==
=
!=