null و undefined
مقدارهای بولی را دیدید — بله یا خیرِ روشن. برنامه گاهی باید بگوید «اینجا مقداری نیست.» در JavaScript دو جور خالی رایج داریم: undefined و null. ظاهرشان شبیه هم است، ولی داستان پشت هر کدام فرق دارد. اینجا جداشان میکنیم تا بعداً تبدیل نوع و چکها گیجتان نکند.
تفاوت null و undefined چیست؟
undefined معمولاً یعنی «هنوز چیزی اینجا نگذاشتهاند» — متغیری با let تعریف شده و مقدار نگرفته، یا تکهای که غایب است. null یعنی «عمداً خالی»: خودتان (یا یک API) مقدار null را میگذارید تا جا را پاک کنید. با typeof چک کنید: typeof undefined میشود "undefined"، اما typeof null همان quirk قدیمی "object" است. وقتی با یکیشان مقایسه میکنید === را ترجیح بدهید. هر دو falsyاند، ولی هیچکدام نوع بولی (true / false) نیستند.
جعبهٔ ابزار مقدار خالی
📊 null در برابر undefined برای شروع
| مفهوم | نمونه | نتیجه / نکته |
|---|---|---|
| غایب / هنوز مقدار ندارد | let x; بعد x |
undefined |
| خالیِ عمدی | let box = null |
خودتان خالی را انتخاب کردهاید |
typeof برای غایب |
typeof undefined |
"undefined" |
typeof برای خالی |
typeof null |
"object" (quirk — باز هم یعنی خالی) |
| مقایسهٔ سختگیر | box === null |
وقتی box همان null باشد true |
| نکتهٔ مقایسهٔ شل | null == undefined |
با == میشود true — برای وضوح === بهتر است |
undefined — هنوز مقدار نگذاشتهاید
با let اسم بسازید و چیزی به آن ندهید. مقدار undefined است. هم خودِ مقدار را لاگ کنید هم typeof را تا برچسب "undefined" جا بیفتد.
let nickname;
console.log(nickname);
console.log(typeof nickname);
null — خالیِ عمدی
وقتی میخواهید سیگنال واضح «بدون مقدار» بدهید، null بگذارید. این با فراموش کردنِ مقداردهی فرق دارد.
let selected = null;
console.log(selected);
console.log(typeof selected);
typeof کنار هم
هر دو نتیجه را کنار هم ببینید. یادتان بماند: چاپ "object" برای typeof null quirk است، نه اینکه همین حالا درس کامل آبجکت را شروع کرده باشید.
console.log(typeof undefined);
console.log(typeof null);
let a;
let b = null;
console.log(typeof a);
console.log(typeof b);
برای null و undefined ترجیح بدهید ===
=== هم مقدار را میپرسد هم نوع را. وقتی منظورتان «دقیقاً null» یا «دقیقاً undefined» است از آن استفاده کنید. با == ممکن است null و undefined با هم جور شوند — برای تازهکار گیجکننده است.
let user = null;
let title;
console.log(user === null);
console.log(title === undefined);
console.log(user === undefined);
== شل میتواند این دو را قاطی کند
با ==، null و undefined با هم جور میشوند. یکبار لاگ کنید تا غافلگیری را ببینید — بعد چک واقعی را روی === نگه دارید.
console.log(null == undefined);
console.log(null === undefined);
خط اول بهخاطر شل بودن == برابر true است. خط دوم false است. چک واقعی را با === بنویسید تا منظورتان روشن بماند.
هر دو خالی را روی صفحه نشان دهید
یک اسم شبیه undefined و یکی با null نگه دارید و با textContent برچسب کوتاه بنویسید.
<!DOCTYPE html>
<html>
<head>
<title>null and undefined — labels</title>
</head>
<body>
<p id="out">…</p>
<script>
let title;
let avatar = null;
document.getElementById("out").textContent =
"title=" + title + " | avatar=" + avatar;
</script>
</body>
</html>
پاراگراف هر دو خالی را در یک خط نشان میدهد. فقط avatar را به یک رشتهٔ کوتاه عوض کنید، صفحه را تازه کنید و ببینید نیمهٔ راست عوض میشود ولی title همان undefined میماند.
خودتان امتحان کنید
let city;بسازید — بدون مقداردهی،cityوtypeof cityرا لاگ کنید.let bag = null;بگذارید — مقدار وtypeof bagرا لاگ کنید (quirkِ"object"را ببینید).typeof undefinedوtypeof nullرا کنار هم لاگ کنید تا فرق معلوم شود.- با
===مقایسه کنید: متغیرِnullرا باnullو باundefinedچک کنید. - یکبار
null == undefinedرا لاگ کنید؛ بعد چکهای واقعی را با===بنویسید. - در دمو HTML مقدار
avatarرا"pic.png"کنید، تازه کنید و خط جدید را بخوانید.
اشتباههای رایج
- یکی دانستن همیشگی
nullوundefined— معنیشان فرق دارد (عمدی در برابر هنوز مقدار نگرفته) - وحشت از
typeof nullبرابر"object"— quirk است؛ باز همnullرا خالیِ عمدی بدانید - تکیه روی
==بین آنها بدون دیدن جور شدنِ شل - صدا زدن هر کدام بهعنوان بولی — خالیاند؛ بولی فقط
true/falseاست - قاطی کردن رشتهٔ خالی
""باnull—""هنوز رشته است
خلاصه
undefined: غایب / هنوز مقدار نگرفته؛typeof→"undefined"null: خالیِ عمدی که خودتان میگذارید؛typeof→"object"(quirk)- برای چک روشن
===را ترجیح بدهید؛ هر دو falsyاند ولی بولی نیستند - رشتهٔ خالی
""متن است — همانnullیاundefinedنیست - بعدی: تبدیل نوع — عوض کردن عمدی یک جور مقدار به جور دیگر
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود