درس 11 از 24

عملگر typeof در جاوااسکریپت چیست؟ باگ معروف typeof null

بخش: کار با انواع داده در جاوا اسکریپت

عملگر typeof در جاوااسکریپت یک ابزار ساده اما قدرتمند است که به شما کمک می‌کند نوع داده‌ی (data type) یک متغیر یا مقدار را بفهمید. خروجیِ typeof همیشه یک رشته (string) است که نوع را نشان می‌دهد.

چند مثال:

let num = 42;
console.log(typeof num); // "number"

در این مثال متغیر num مقدار ۴۲ (عدد) دارد، بنابراین typeof num رشته‌ی "number" را برمی‌گرداند.

مثال دیگر:

let isUserLoggedIn = true;
console.log(typeof isUserLoggedIn); // "boolean"

اینجا چون مقدار true از نوع بولی است، خروجی "boolean" خواهد بود.

استفاده از typeof مخصوصاً هنگام دیباگ کردن (debugging) یا وقتی می‌خواهید دقیقاً بدانید با چه نوع داده‌ای در کدتان سروکار دارید، بسیار مفید است.


باگ معروف typeof null

در جاوااسکریپت یک نکته/رفتار عجیب و معروف درباره‌ی null وجود دارد:

let exampleVariable = null;
console.log(typeof exampleVariable); // "object"

با اینکه exampleVariable مقدار null دارد، typeof به‌جای اینکه چیزی مثل "null" برگرداند، "object" برمی‌گرداند.

این موضوع به‌طور گسترده به عنوان یک باگ تاریخی در جاوااسکریپت شناخته می‌شود که از نسخه‌های خیلی اولیه‌ی زبان باقی مانده است. دلیلش به طراحی اولیه‌ی جاوااسکریپت برمی‌گردد؛ در پیاده‌سازی‌های اولیه، مقادیری مثل null به شکلی نمایش داده می‌شدند که باعث می‌شد typeof آن‌ها را به‌صورت «object» گزارش کند.

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


سوالات

1) typeof وقتی روی یک رشته (string) استفاده شود چه چیزی برمی‌گرداند؟

  • “string”
  • “text”
  • “character”
  • “object”

2) چرا typeof null یک باگ در جاوااسکریپت محسوب می‌شود؟

  • چون "null" برمی‌گرداند نه "undefined"
  • چون "object" برمی‌گرداند نه "null"
  • چون روی null کار نمی‌کند
  • چون خطا می‌دهد

3) typeof وقتی روی یک عدد (number) استفاده شود چه چیزی برمی‌گرداند؟

  • “number”
  • “integer”
  • “numeric”
  • “float”