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

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

דמויות מתוקות וקופאיות

כל הערכים ב-JavaScript הם true או false מרומזים, וניתן לאלץ אותם: בערך הבוליאני התואם - לדוגמה, באמצעות הפונקציה שמשווה. קבוצה מוגבלת של ערכים תגרום לאילוץ false:

  • 0
  • null
  • undefined
  • NaN
  • מחרוזת ריקה ("")

כל שאר הערכים מאלצים את אל true, כולל כל מחרוזת שמכילה אחד או יותר. ואת כל המספרים שאינם אפס. הן נקראות בדרך כלל "truthy" וגם 'falsy' ערכים.

"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 (!) מבטל את ערך האמת או ה-Falsy של אופרנד, ומחזיר את הערך 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"

האופרנד הלוגי (||) מחזיר את האופרנד הראשון שלו רק אם האופרנד הזה הוא הפונקציה מחשבת את 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, את 'אופרטור איחוד null' (??) מחזירה את האופרנד הראשון רק אם ל-operand יש כל ערך מלבד 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, צריך להקצות לו את הערך של operand במקום זאת:"

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

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

בדיקת ההבנה

איזה אופרטור מציין "שווה באופן מוחלט"?

===
==
=
!=