מה ההבדל בין == לבין === ב- JavaScript

כאשר אנחנו עושים השוואה ב- JavaScript בין 2 משתנים יש שתי אופרטורים אפשריים לביצוע הפעולה == או ===.

כדאי לדעת את ההבדלים ביניהם כי שימוש לא נכון עלול לגרום לבאגים, זריקת שגיאות או תוצאות לא צפויות בקוד שנכתוב.

 

האופרטור ===, שנקרא גם Strict Equality Comparison, עושה השוואה גם בין סוג המשתנה וגם בין הערך שלו, כך שאם סוג המשתנים שעושים ביניהם השוואה הוא לא זהה נקבל false. רק במידה וסוג המשתנים זהה תתבצע גם בדיקה על ערכם של המשתנים ותוחזר תשובה בהתאם.

 

האופרטור ==, שנקרא גם Abstract Equality Comparison, עושה השוואה בין הערך של הערכים של המשתנים, אפילו אם הם לא מאותו סוג.

כלומר, אם הם לא מאותו סוג הוא יעשה לערכים של המשתנים המרה על מנת שיהיו מאותו סוג ורק לאחר מכן יעשה השוואה בין הערכים.

אם הם יהיו מאותו סוג, תוצאת ההשוואה בין האופרטור == לאופראטור === תהיה זהה.

 

ברוב המקרים, עדיף להשתמש באופרטור === על מנת למנוע מקרים לא צפויים.

 

דוגמאות

1==1                     \\true
1===1                    \\true

"test"=="test"           \\true
"test"==="test"          \\true

"1"==1                   \\true
"1"===1                  \\false

false=="0"               \\true
false==="0"              \\false

 

השוואה בין אובייקטים

שימו לב שבמקרה של השוואה בין משתנים מסוג object נקבל true רק אם שני המשתנים מצביעים על אותו מקום, אפילו אם ערכם זהה אך הם מצביעים על אובייקטים שונים נקבל false. במקרה זה, ההשוואה עם שני סוגי האופרטורים תחזיר אותה תשובה.

var a = new String('test');
var b = new String('test');
var c = a;

a==b    //false
a===b   //false

a==c    //true
a===c   //true

 

השוואת ביצועים

מבחינת ביצועים, האופרטורים זהים מבחינה זו כאשר מדובר במשתנים מאותו סוג, אך כאשר המשתנים הם מסוג שונה אז האופרטור  === יהיה מהיר יותר מהאופרטור == מכיוון שהוא לא עושה את ההמרה למשתנים.

 

מידע נוסף

* למי שמעוניין לראות איך מתבצעת ההמרה במקרה של האופרטור ==, ניתן למצוא זאת באתר של מוזילה בטבלה מסודרת

* האלגוריתם להשוואה עם האופרטור == (Abstract Equality Comparison) ניתן למצוא באתר של ECMAScript Language Specification

* דוגמאות של תוצאות השוואות לא צפויות ב-JavaScript כאשר משתמשים באופרטור == ניתן לראות בתגובה הבאה מתוך StackOverflow

 

 

תגיות:

הוסף תגובה