تفاوت بین undefined و null در جاوااسکریپت

اگر شما هم با جاوااسکریپت کار کرده باشید، باید دو کلمه کلیدی (keyword) تحت عنوان null و undefined را بشناسید.

undefined vs null
undefined vs null

اگر چه ما هردوی اینها را می‌شناسیم، اما پاسخ صریح به این سوال قدری دشوار به نظر می‌رسد. بنابراین در این مقاله تصمیم گرفتم که این سوال را بررسی کنیم و پاسخ صریحی به آن بدهیم.

هردوی null و undefined از نوع false values و همچنین از انواع داده جاوااسکریپت نظیر

('string', 'number', 'null', 'undefined', 'boolean', 'symbol', 'bigint')

هستند.

تفاوت null و undefined

کلمه کلیدی undefined آنچنان که می‌نماید و از معنی آن برمی‌آید به معنی تعریف نشده یا not defined است. برای مثال اگر شما var a را تعریف کنید و به آن مقداری ندهید، معنی این را می‌دهد که این متغیر تعریف نشده است؛ بنابراین باید مقدار undefined را برگرداند.

هر بار که شما تابع یا متغیری را که جاوا اسکریپت مقدار آن را نمی‌داند، صدا بزنید؛ مقدار undefined را برمی‌گرداند.

نمونه کد زیر را استفاده کنید تا به معنی حرف من پی ببرید:

var num;
console.log(num);

علت این که قطعه کد بالا مقدار undefined را برمی‌گرداند، این است که کامپایلر(مرورگر) نمی داند که مقدار این متغیر (‌num) چیست و این متغییر مقداری را در خود ندارد.

پس متوجه شدیم که هرگاه متغییر را تابعی دربردارنده مقداری نباشید، مقدار بازگشتی از آن undefined خواهد بود.

اما null چه چیزی است؟ null مقدار متغیری است که تعریف شده است، اما « هیچ » یا « خنثی » تعریف شده است، در واقع این هیچ یا خنثی مقدار آن متغیر خاص است.

اگر مقداری شفاف تر بخواهم بگویم؛ شما یک متغییر دارید که می‌خواهید به جای آنکه در آن مقداری بریزید یا مقدار آن را تعریف نشده رها کنید، ترجیح داده‌اید که مقدار null که ارزش خاصی ندارد را در آن قرار بدهید.

نوع null هم object اس که یکی از انواع داده است که MDN documentation آن را در انواع چند گانه جاوااسکریپت دسته بندی کرده است.

نتیجه گیری

اگر چه null و undefined در کل مشابه هستند اما تفاوتی در نوع دارند. بنابراین با مقایسه == مقدار true و با مقایسه به کمک === مقدار false را بازخواهند گرداند.

اگر چه موضوع این مقاله درکل ساده و پیش پا افتاده بود، اما یک سوال زیرکانه در مصاحبه های کاری Frontend می‌تواند باشد.