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

اهداف یادگیری

  • شناخت انواع Primitive موجود در جاوااسکریپت
  • درک مفهوم Immutable بودن مقادیر Primitive
  • فهم تفاوت رفتار Primitive Types هنگام کپی شدن یا انتقال بین متغیرها
  • آشنایی با typeof برای شناسایی نوع یک مقدار

مقدمه

جاوااسکریپت داده‌ها را به دو دسته‌ی کلی تقسیم می‌کند: Primitive Types (انواع ابتدایی) و Reference Types (انواع ارجاعی). در این درس با Primitive Types آشنا می‌شویم؛ در درس بعدی به Reference Types می‌پردازیم. درک درست این دو دسته، پایه‌ی بسیاری از رفتارهای بعدی زبان از جمله مقایسه‌ی مقادیر و نحوه‌ی کپی شدن داده‌هاست.

انواع Primitive در جاوااسکریپت

جاوااسکریپت هفت نوع Primitive دارد:

نوعمثال
String"سلام"
Number25، 3.14
Booleantrue، false
undefinedمقداری که هنوز مقداردهی نشده
nullنبود عمدی مقدار
Symbolمقدار یکتا و غیرقابل تکرار
BigIntاعداد صحیح بسیار بزرگ

در این مرحله فقط با String، Number، Boolean، undefined و null کار می‌کنیم. Symbol و BigInt در فصل‌های مربوط به Metaprogramming و Type System با جزئیات بیشتری بررسی خواهند شد.

مثال هرکدام

let firstName = "علی";        // String
let age = 25;                 // Number
let isOnline = true;           // Boolean
let city;                      // undefined
let selectedItem = null;       // null

typeof — شناسایی نوع مقدار

برای بررسی نوع یک مقدار می‌توان از عملگر typeof استفاده کرد:

console.log(typeof "سلام");    // "string"
console.log(typeof 25);         // "number"
console.log(typeof true);       // "boolean"
console.log(typeof undefined);  // "undefined"
console.log(typeof null);       // "object"

نکته‌ی مهم: خروجی typeof null برابر "object" است، درحالی‌که null عملاً یک Primitive Type مستقل است. این رفتار از یک باگ قدیمی در نخستین نسخه‌های جاوااسکریپت باقی مانده و به دلایل سازگاری هرگز اصلاح نشده است. جزئیات بیشتر این موضوع در فصل مربوط به Type System بررسی می‌شود.

ویژگی مهم: Immutable بودن Primitive Types

مقادیر Primitive، غیرقابل تغییر (Immutable) هستند. این به این معنی نیست که متغیر نمی‌تواند مقدار جدیدی بگیرد، بلکه یعنی خودِ مقدار Primitive هرگز از درون تغییر داده نمی‌شود؛ هر عملیاتی روی آن، یک مقدار جدید تولید می‌کند.

let text = "سلام";
text.toUpperCase();
console.log(text); // "سلام" — مقدار اصلی تغییر نکرده است

رفتار Primitive Types هنگام کپی شدن

وقتی یک متغیر Primitive را به متغیر دیگری نسبت می‌دهیم، مقدار آن کپی می‌شود، نه ارجاع آن:

let a = 10;
let b = a; // مقدار a کپی می‌شود
b = 20;

console.log(a); // 10
console.log(b); // 20

تحلیل کد

در مثال بالا، تغییر b هیچ تأثیری روی a ندارد، چون هرکدام مقدار مستقل خود را دارند. این رفتار دقیقاً نقطه‌ی مقابل چیزی است که در Reference Types (مثل Object و Array) خواهیم دید؛ جایی که کپی کردن متغیر، در واقع کپی کردن ارجاع به همان داده است، نه خود داده. این تفاوت را در درس بعدی با جزئیات کامل بررسی می‌کنیم.

اشتباهات رایج

  • تصور اینکه typeof null باید "null" برگرداند؛ درحالی‌که به دلایل تاریخی "object" برمی‌گرداند.
  • فکر کردن به این‌که متدهایی مثل toUpperCase() مقدار اصلی رشته را تغییر می‌دهند، درحالی‌که همیشه یک مقدار جدید بازمی‌گردانند.

ارتباط با سایر مفاهیم

درک Immutable بودن Primitive Types پیش‌نیاز فهم درست Reference Types، مقایسه‌ی مقادیر با == و ===، و همچنین رفتار Closure در فصل‌های بعدی است.

جمع‌بندی

جاوااسکریپت هفت نوع Primitive دارد که مهم‌ترین آن‌ها String، Number، Boolean، undefined و null هستند. این مقادیر Immutable هستند و هنگام نسبت‌دهی به متغیر دیگر، کپی می‌شوند نه ارجاع داده می‌شوند. این ویژگی، پایه‌ی تفاوت اصلی بین Primitive Types و Reference Types است که در درس بعدی بررسی می‌کنیم.