تفاوت و شباهت های Null و Undefined در جاوا اسکریپت
جاوا اسکریپت زبان جالبیه البته همراه با سوالات بسیار زیاد. یکی از این جنبه های گیج کننده در جاوا اسکریپت تفاوت ها و شباهت های بین null و undefined هستش. خیلی هامون از null با خبریم و می دونیم توی همه زبان های برنامه نویسی هم وجود داره. اما بهتر بدونیم که چیا توی جاوا اسکریپت undefined هستن.
تعریف null در جاوا اسکریپت
در تعریف null یعنی هیچ ارزشی وجود ندارد.درست مثل سایر زبانهای برنامه نویسی ، شما می تونید مقدار null را به یک متغیر اختصاص دهید ، که نشان می دهد هیچ مقداری نداره.این یعنی اینکه صریحاً خالی هستش. مثل این مثال:
let value = null;
console.log(value); // null
تعریف undefined در جاوا اسکریپت
خوب ، ما به آنچه null انجام می ده می رسیم. منظور از undefined واقعاً چیه؟
به طور کلی Undefined به معنای اعلام یک متغیر است ، اما تعریف نشده است.
بیایید کمی مثال قبلی خودمون اصلاح کنیم تا تعریف نشده را بهتر درک کنیم.
let value;
console.log(value); // undefined
در این حالت value اعلام شده است اما به آن مقداری اختصاص داده نمی شود.در نتیجه این یک undefined است.درست مانند null ، می تونید یک متغیر را روی مقدار تعریف نشده تعیین کنید.
let value = undefined;
console.log(value); // undefined
یکی دیگر از سناریوهای رایج ، که در آن با یک undefined روبرو خواهید شد ، تلاش برای دستیابی به property یک object است که وجود ندارد. بیایید مثالی را در زیر نشان دهیم که در آن توضیح داده شده است.
let myObject = {};
console.log(myObject.value); // undefined
به طور خلاصه ، در اینجا برخی از سناریوهایی وجود دارد که در آنها شاهد بازگشت undefined هستند.
- یک object اعلام می شود اما تعریف / مقداردهی اولیه نشده است.
- دسترسی به object property یا index آرایه ای که وجود ندارد.
- فراخوانی یک تابع بدون پارامترهای مورد نیاز آن.
شباهتشون در چی هستش؟
هر دو null و undefined مقادیر ابتدایی در JavaScript هستند. برخی از مقادیر ابتدایی دیگر شامل Boolean ، String و Number است.نکته دیگری که باید به آن توجه بشه اینه که هنگام مقایسه صفر و تعریف نشده با استفاده از یک بررسی برابری ، مساوی هستن. دلیل این امر اینه که هر دو در JavaScript مقادیر کاذب محسوب می شن.با این حال ، اگر یک بررسی دقیق برابری === انجام بدید ،می بینید که اینها برابر نیستن.
null == undefined // true
null === undefined //false
تفاوت ها در چی هستش؟
برابری; بسیاری از پایگاه های کد که بررسی کردم متوجه شدم تعداد زیادی از ویژگی های Uninitialized را بررسی می کنن. این اشتباهه و منجر به یک رفتار غیر منتظره می شه. خصوصیات Uninitialized در زبانهای دیگر مقدار null پیش فرض دارند ، اما در JavaScript ، به صورت undefined هستن. آنچه آن را حتی بیشتر گمراه کننده می کند این است که اگر شما یک برابری آزاد را از (x == null) انجام دهید ، حتی اگر x تعریف نشده باشد ، این درست خواهد بود. این به دلیل نوع اجباری است که در JavaScript اتفاق می افتد.
به طور کلی null کاملاً با undefined برابر نیست. اما null آزادانه برابر با undefined است.
console.log(typeof(undefined)); //"undefined"
console.log(typeof(null)); //"object"
در اینجا توجه کنید که undefined از نوع undefined است در حالی که null یک object است.
null !== undefined
null == undefined
عملیات حسابی; تفاوت جالب دیگه ای که باید به اون توجه بشه این هستش که وقتی عملیات حساب با null در مقابل undefined انجام می شه.عمليات حسابي با مقدار null منجر به مقدار عدد صحیح می شود در حالی که هر عمل حسابی با undefined منجر به تغییر مقدار متغیر به NaN می شه.
let a = 5 + null;
console.log(a); // 5let b = 5 + undefined;
console.log(b); // NaN
خب به انتها مقاله رسیدیم و امیدوارم تونسته باشم نکات خوبی توی این مقاله خدمتتون منتقل کرده باشم.
ممنون از توجهتون :)
مطلبی دیگر از این انتشارات
این قسمت جاوا اسکریپت سخت گیر میشود !
مطلبی دیگر از این انتشارات
بررسی ویژگیهای جدید ECMAScript 2020
مطلبی دیگر از این انتشارات
تفاوت در کپی سطحی و کپی عمقی در جاوا اسکریپت