אופרטורים להשוואה

אופרטורים של השוואה משווים בין הערכים של שני אופרנדים ובוחנים אם ההצהרה שהם יוצרים היא true או false. בדוגמה הבאה נשתמש באופרטור Strict equality (===) כדי להשוות בין שני אופרנדים: הביטוי 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

כדי למנוע אי בהירות שעלולה להיגרם מאילוץ אוטומטי, כדאי להשתמש ב-=== כשהדבר אפשרי.

מפעיל תיאור Usage תוצאה
=== שווה לחלוטין 2 === 2 true
!== לא שווה בהכרח 2 !== "2" true
== שווה (או "שווה באופן חלש") 2 == "2" true
!= לא שווה ל- 2 != "3" true
> גדול מ- 2 > 3 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

אופרטור צימוד אפסי

כפי שהוכנס ב-ES2020, האופרטור nullish coalescing (??) מחזיר את האופרנד הראשון רק אם לאופרנד יש ערך אחר מלבד 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

האופרטור הלוגי OR (||=) מעריך את האופרנד השני ומקצים אותו לאופרנד הראשון אם האופרנד הראשון מוערך ל-false. למעשה, "אם האופרנד הראשון הוא FALSE, צריך להקצות לו את הערך של האופרנד השני:"

let myVariable = false;
myVariable ||= 2 + 2;
> 4

myVariable = true;
myVariable ||= 2 + 2;
> true

בחינת ההבנה

איזה אופרטור מציין 'שווה ביותר'?

===
==
=
!=