قبل از اینکه درباره تفاوت‌های این دو صحبت کنیم، بهتره که بدونیم این دو جزو ۸ نوع داده‌ای هستن که توی جاوا اسکریپت وجود دارن:

['null','undefined', 'string', 'number', 'boolean', 'object', 'symbol', 'bigint'];

همچنین این دو به اصطلاح falsy value هستن. یعنی مقدارهایی که وقتی اونها رو به Boolean تبدیل می‌کنیم، خروجی false هست:

console.log(!!null); // false
console.log(!!undefined); // false

console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false

و اما تفاوت‌ها. از undefined شروع کنیم:

ویژگی‌های منحصر به فرد undefined:

  • undefined یک مقدار پیشفرض برای متغیرهایی هست که مقدار ندارن. یعنی موقع ساختن این متغیر بهش مقدار داده نشده
  • undefined یک خروجی پیشفرض هست برای تابعی که return نداره
  • وقتی یک پراپرتی (یا key) از یک آبجکت رو صدا بزنیم که وجود نداره، خروجی undefined هست
let undefinedVar;
function noReturn() {

}

const alphabet = {
    a: "ay",
    b: "bee",
    c: "si"
};

console.log(undefinedVar); // undefined
console.log(noReturn()); // undefined
console.log(alphabet.d); // undefined

console.log(typeof undefinedVar); // undefined

 

ویژگی‌های منحصر به فرد null:
در واقع null خودش یک مقدار هست. یک مقدار "پوچ" یا ‌‌"خالی" که می‌تونیم اون رو به متغیرها نسبت بدیم:

let x = null;

console.log(x); // null
console.log(typeof x); // object!

به این مقایسه‌ها دقت کنین:

null == undefined; // true
null === undefined // false

توی مقایسه اول برای این true شد که هر دو falsy هستن. مقایسه دوم برای این false شد که توی سه مساوی (===) تبدیل نوع انجام نمی‌گیره. نوع یک ‌null برابر با آبجکت و نوع یک undefined همون undefined هست.

 

منبع: