آنچه در این مقاله میخوانید
تفاوت null و undefined در جاوااسکریپت
۱۹ تیر ۱۳۹۹
در زبان JavaScript، دو مقدار خاص به نامهای null
و undefined
وجود دارند که معمولاً برای نمایش نبود مقدار به کار میروند. در نگاه اول ممکن است تفاوت این دو برای بسیاری از توسعهدهندگان گیجکننده باشد، چون هر دو نشاندهندهی “هیچ چیز” هستند. اما در واقع، این دو مفهوم تفاوتهای اساسی با یکدیگر دارند که درک آنها برای نوشتن کدهای دقیقتر و بدون خطا ضروری است. در ادامه با شباهتها و تفاوتهای null
و undefined
آشنا میشویم.
در ادامه خواهیم خواند:
- شباهتهای null و undefined
- تعریف undefined
- تعریف null
- چگونه بررسی کنیم که یک متغیر null یا undefined است؟
- بررسی نوع با استفاده از typeof
- جمع بندی

شباهتهای null و undefined
هر دو مقدار null
و undefined
جزو مقادیر اولیه (primitive values) در جاوااسکریپت هستند و هر دو برای نمایش نبود یک مقدار واقعی به کار میروند. با این حال، معنای آنها دقیقاً یکسان نیست.undefined
معمولاً نشاندهندهی حالتی است که متغیر تعریف شده اما هنوز هیچ مقداری به آن اختصاص داده نشده، در حالی که null
حالتی است که ما بهصورت عمدی به یک متغیر مقدار “خالی” دادهایم تا نشان دهیم که فعلاً هیچ دادهای در آن قرار ندارد.
بنابراین، اگرچه هر دو از نظر ظاهری به نبود مقدار اشاره دارند، اما در عمل، کاربرد و مفهومشان در منطق برنامه متفاوت است.
تعریف undefined
در جاوااسکریپت، وقتی یک متغیر را تعریف میکنیم اما هنوز هیچ مقداری به آن اختصاص نمیدهیم، مقدار پیشفرض آن undefined
خواهد بود. این یکی از رفتارهای پیشفرض زبان است که نشان میدهد متغیر وجود دارد، اما هنوز مقدار مشخصی درون آن قرار نگرفته است.
مثال:
let age;
console.log(age);
// Output: undefined
در این مثال، متغیر age
تعریف شده ولی هیچ مقداردهی اولیهای برای آن صورت نگرفته است. وقتی مقدار آن را چاپ میکنیم، خروجی undefined
خواهد بود. یعنی جاوااسکریپت متوجه است که این متغیر وجود دارد، اما مقدار مشخصی برای آن ثبت نشده.
با هاست Node.js لیارا، توسعه و استقرار اپلیکیشنهای خود را با سرعت و سادگی بینظیر تجربه کنید.
✅ استقرار سریع با یک کلیک یا از طریق CLI✅ منابع سختافزاری اختصاصی✅ پشتیبانگیری خودکار
خرید و راهاندازی هاست Node.js
تفاوت با متغیر تعریفنشده
نکته مهم این است که undefined
با حالتی که متغیر اصلاً تعریف نشده باشد فرق دارد. اگر تلاش کنید از متغیری استفاده کنید که هیچگاه تعریف نشده، برنامه دچار خطا خواهد شد.
console.log(user);
// ReferenceError: user is not defined
در اینجا، متغیر user
حتی ایجاد نشده است، بنابراین جاوااسکریپت نمیداند چنین چیزی وجود دارد و خطای is not defined
تولید میکند. اما وقتی متغیری تعریف شده ولی مقدار ندارد، بدون خطا اجرا میشود و فقط مقدار undefined
را برمیگرداند.
تعریف null
در جاوااسکریپت، زمانی که بخواهیم بهطور صریح و عمدی مشخص کنیم که یک متغیر در حال حاضر هیچ مقدار معتبری ندارد، از مقدار null
استفاده میکنیم. به بیان سادهتر، null
به معنای «فقدانِ هدفمندِ مقدار» است.
let age = null;
console.log(age);
// Output: null
در مثال بالا، ما به صورت آگاهانه مقدار null
را به متغیر age
اختصاص دادهایم. این کار معمولاً زمانی انجام میشود که بخواهیم متغیر را مقداردهی اولیه کنیم، اما هنوز داده واقعی برای آن نداریم. با این کار، به وضوح اعلام میکنیم که این متغیر فعلاً خالی است، اما بعداً قراره مقدار مشخصی دریافت کند.
تفاوت با undefined
هرچند null
و undefined
هر دو به نوعی به «نبود مقدار» اشاره دارند، اما تفاوتشان در این است که:
undefined
بهصورت خودکار توسط جاوااسکریپت به متغیرهایی اختصاص داده میشود که تعریف شدهاند اما مقداردهی نشدهاند.null
بهصورت دستی و توسط برنامهنویس استفاده میشود تا بهطور صریح مشخص شود که متغیر فعلاً مقدار ندارد.
این تمایز در بسیاری از شرایط برنامهنویسی مهم است؛ مثلاً هنگام بررسی وضعیت فیلدها در فرمها، یا در پاسخهای دریافتی از یک API که ممکن است مقدار خاصی نداشته باشد.
با هاست Next.js، همهچیز برای اجرای روان اپلیکیشنهای شما آماده است از توسعه گرفته تا انتشار.
✅ راهاندازی بدون دردسر ✅ سرعت بارگذاری بالا با زیرساخت قدرتمند✅ محیطی پایدار برای پروژههای در حال رشد
خرید و راهاندازی هاست Next.js
نکته جالب درباره null
با اینکه null
یکی از مقادیر اولیه (primitive) در جاوااسکریپت است، اما وقتی با عملگر typeof
بررسی میشود، نتیجهی آن object
خواهد بود.
let age = null;
console.log(typeof age);
// Output: "object"
این رفتار در واقع یک باگ قدیمی در طراحی اولیه جاوااسکریپت است که به دلایل سازگاری (backward compatibility) هنوز در زبان باقی مانده. پس اگر دیدید که typeof null
برابر با object
است، نگران نباشید؛ این رفتار طبیعی جاوااسکریپت است، نه نشانهای از اشتباه در کدنویسی شما.
چگونه بررسی کنیم که یک متغیر null یا undefined است؟
برای بررسی اینکه یک متغیر مقدار null
یا undefined
دارد، چند روش مختلف وجود دارد که بسته به نیاز شما میتوانید یکی از آنها را انتخاب کنید.
1. بررسی دقیق با عملگرهای مقایسهای
اگر بخواهید با دقت مشخص کنید که مقدار یک متغیر دقیقاً null
یا دقیقاً undefined
است، باید از عملگر مقایسهی سختگیرانه (strict comparison) استفاده کنید.
age === null;
age === undefined;
این روش به شما اجازه میدهد تفاوت میان null
و undefined
را بهطور دقیق تشخیص دهید. مثلاً اگر متغیری مقدار null
داشته باشد، شرط age === undefined
هرگز برقرار نخواهد بود.
با هاست React لیارا، اپلیکیشنهای خود را سریع و بدون دغدغه راهاندازی کنید و از عملکرد پایدار و امنیت بینظیر بهرهمند شوید.
✅ نصب آسان با چند کلیک✅ منابع اختصاصی و پرسرعت✅ بکاپ خودکار ✅ سرورهای داخلی با تأخیر کم
خرید و راهاندازی هاست React
2. بررسی کلیتر با استفاده از شرطهای عمومی
در بسیاری از موارد، تنها کافی است بدانید که آیا متغیر مقدار “معتبری” دارد یا نه. در چنین حالتی، میتوانید از شرطی مانند زیر استفاده کنید.
if (!age) {
}
در این مثال، از ویژگی truthy/falsy بودن مقادیر در جاوااسکریپت استفاده میشود. توجه داشته باشید که این روش نه تنها null
و undefined
، بلکه مقادیر دیگری مانند 0
یا رشتهی خالی ''
را هم در بر میگیرد. پس اگر فقط به دنبال بررسی نبود مقدار هستید (و نه تمایز دقیق)، این روش ساده و مفید است.
اگر بخواهید فقط دو مقدار null
و undefined
را با هم بررسی کنید و دیگر مقادیر falsy را نادیده بگیرید، میتوانید از عملگر سست ==
استفاده کنید:
if (age == null) {
}
در این حالت، جاوااسکریپت با استفاده از تبدیل نوع خودکار، null
و undefined
را برابر میداند، اما هیچیک از دیگر مقادیر falsy را شامل نمیشود.
با هاست Vue.js لیارا، اپلیکیشنهای خود را سریع، ایمن و بدون دردسر راهاندازی کنید.
✅ استقرار یککلیک یا از طریق CLI✅ منابع اختصاصی✅ بکاپ خودکار✅ سرورهای داخلی برای بهبود سئو
خرید و راهاندازی هاست Vue.js
بررسی نوع با استفاده از typeof
در جاوااسکریپت، یکی از سادهترین راهها برای بررسی نوع یک متغیر، استفاده از عملگر typeof
است. این عملگر یک رشته (string) برمیگرداند که نوع دادهای متغیر را نشان میدهد.
بررسی undefined
اگر متغیری را تعریف کنید ولی به آن مقداری ندهید، مقدار آن بهطور پیشفرض undefined
خواهد بود، و typeof
نیز همین را برمیگرداند:
let age;
console.log(typeof age);
// Output: "undefined"
در اینجا متغیر age
فقط تعریف شده و مقداردهی نشده است، پس نوع آن undefined
در نظر گرفته میشود.
بررسی null
اما زمانی که متغیر را بهصورت دستی مقدار null
بدهید.
let age = null;
console.log(typeof age);
// Output: "object"
شاید انتظار داشته باشید که typeof age
در این حالت مقدار "null"
را برگرداند، اما خروجی "object"
است. این رفتار یک باگ قدیمی در طراحی اولیهی جاوااسکریپت است که از همان نسخههای ابتدایی در زبان باقی مانده و به دلایل سازگاری عقبرو (backward compatibility) هرگز اصلاح نشده است.
به همین دلیل، هنگام بررسی نوع null
نباید صرفاً به typeof
تکیه کنید. اگر نیاز دارید بهصورت دقیق بررسی کنید که مقدار متغیر null
است یا نه، بهتر است از مقایسه مستقیم استفاده کنید.
if (age === null) {
}
با هاست Nuxt.js لیارا، اپلیکیشنهای Vue خود را با سرعت، امنیت و سادگی بینظیر راهاندازی کنید.
✅ استقرار آسان با یک کلیک یا از طریق CLI✅ منابع اختصاصی برای عملکرد بهتر✅ پشتیبانگیری خودکار
خرید و راهاندازی هاست Nuxt.js
جمع بندی
در نهایت، undefined
معمولاً زمانی استفاده میشود که متغیری تعریف شده اما هنوز مقدار نگرفته، در حالی که null
بهطور صریح برای نشان دادن “نبود مقدار” به کار میرود. هرچند هر دو نوعی “تهی بودن” را نمایش میدهند، اما تفاوت در کاربرد و رفتارشان بسیار مهم است. آشنایی با این تفاوتها به شما کمک میکند تا از خطاهای منطقی در کدها جلوگیری کرده و برنامههایی خواناتر و قابلاعتمادتر بنویسید.
منبع: https://flaviocopes.com/javascript-difference-null-undefined