ב-JavaScript יש כמה דרכים לציין שאין ערך. הדף הזה
מתארת את שתי הדרכים הנפוצות ביותר: סוג הנתונים null
ו-undefined
.
null
מילת המפתח null
מייצגת היעדר ערך שהוגדר בכוונה. null
הוא ראשוני, למרות שהאופרטור typeof
מחזיר ש-null
הוא אובייקט.
זו שגיאה שבוצעה
מהגרסה הראשונה של JavaScript והוא נשאר מכוון
ללא התייחסות, כדי למנוע פגיעה בהתנהגות צפויה ברחבי האינטרנט.
typeof null
> object
אפשר להגדיר משתנה בתור null
מתוך ציפייה שהוא ישקף ערך שהוקצה לו בשלב כלשהו
בסקריפט או בערך שחסר באופן מפורש. אפשר גם להקצות את null
להפניה קיימת כדי להסיר ערך קודם.
undefined
undefined
הוא ערך ראשוני שמוקצה למשתנים
שהוצהרו זה עכשיו, או לערך שמתקבל מפעולה
לא מחזירה ערך משמעותי. לדוגמה, מצב כזה יכול לקרות כשאתם מצהירים
פונקציה במסוף המפתחים של דפדפן:
function myFunction() {}
> undefined
פונקציה מחזירה את הערך undefined
באופן מפורש כאשר ההצהרה return
שלה
לא מחזירה ערך.
(function() {
return;
}());
> undefined
השוואה בין null
לבין undefined
יש חפיפה מסוימת בין undefined
לבין null
, אבל
למטרות שונות. במובן המחמיר ביותר, null
מייצג ערך
מוגדר בכוונה כ'ריק', ו-undefined
מייצג היעדר ערך מוקצה.
null
ו-undefined
שוות במידה חלשה, אבל לא שווים לחלוטין.
אופרטור השוויון החופשי מאלף אופרנדים מסוגים שונים לערך בוליאני
ולכן null
ו-undefined
גם false
. אופרטור השוויון המחמיר
מחשיב אופרנדים של סוגי נתונים שונים כלא שוויוניים.
null == undefined
> true
null === undefined
> false
בשונה ממילת המפתח השמורה null
, undefined
הוא מאפיין של
אובייקט גלובלי. זה היה עיצוב
שהתקבלה בשלבי הפיתוח של JavaScript, והיא אפשרה לדפדפנים מדור קודם
להחליף את undefined
לגמרי. בדפדפנים מודרניים, עדיין אפשר להשתמש
undefined
כמזהה בהיקפים לא גלובליים, שמחליף את הערך שלו בתוך
היקף ההצהרה. לעולם לא להשתמש ב-undefined
כמזהה. הוא
עלול לגרום להתנהגות לא צפויה, ולבלבל אנשים שיתחזקו בעתיד
ב-codebase,
בדיקת ההבנה
מה typeof null
מחזיר?
object
undefined
primitive
string