null ולא מוגדר

ב-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