4- آموزش جاوااسکریپت | انواع دادهها (Data Types)
در این بخش با انواع دادهها در جاوااسکریپت آشنا میشویم. تفاوت بنیادی بین دادههای ابتدایی (Primitive) و مرجع (Reference) را بررسی کرده و یاد میگیریم که جاوااسکریپت چگونه به عنوان یک زبان Dynamic Typed به ما اجازه میدهد انواع مختلف مقادیر را در یک متغیر ذخیره کنیم.
در آموزش قبلی، نحوه تعریف متغیرها با var ،let و const را بررسی کردیم. حالا میخواهیم درباره انواع دادههایی (Data Types) که در این متغیرها ذخیره میشوند صحبت کنیم.
در جاوااسکریپت انواع مختلفی از دادهها وجود دارد، اما بهطور کلی به دو دسته تقسیم میشوند: Primitive (ابتدایی) و Reference (مرجع).
دادههای ابتدایی (Primitive Types)
در دادههای Primitive، مقدار مستقیماً در محلی از حافظه که متغیر به آن دسترسی دارد ذخیره میشود. این دادهها در بخشی از حافظه به نام Stack قرار میگیرند. وقتی به یک داده Primitive دسترسی پیدا میکنید، در واقع با "مقدار واقعی" آن کار میکنید.
انواع دادههای Primitive شامل موارد زیر است:
- String: دنبالهای از کاراکترها (حروف، اعداد، نمادها).
- Number: شامل اعداد صحیح (Integers) و اعداد اعشاری (Decimals/Floats). برخلاف برخی زبانها، در جاوااسکریپت همه اینها فقط یک نوع داده یعنی
Numberمحسوب میشوند. - Boolean: مقادیر منطقی که فقط شامل
trueیاfalseهستند. - Null: نشاندهنده یک مقدار خالی "عمدی" است.
- Undefined: متغیری که تعریف شده اما هنوز مقداری به آن منتسب نشده است. (همه متغیرها بهصورت پیشفرض
undefinedهستند). - Symbol: (معرفی شده در ES6) که کمی پیچیدهتر است و در بخشهای پیشرفته به آن میپردازیم.
دادههای مرجع (Reference Types)
دادههای مرجع در واقع آبجکت (Object) هستند و برخلاف حالت قبل، مقدار واقعی در متغیر ذخیره نمیشود. این دادهها در بخشی از حافظه به نام Heap (حافظه تخصیصیافته پویا) ذخیره میشوند و متغیر فقط یک "مرجع" یا "آدرس" به آن محل در حافظه است.
انواع دادههای مرجع عبارتند از:
- آرایهها (Arrays)
- آبجکتها (Object Literals)
- توابع (Functions)
- تاریخها (Dates)
- و هر چیز دیگری که به عنوان آبجکت شناخته شود.
جاوااسکریپت: یک زبان Dynamically Typed
جاوااسکریپت یک زبان Dynamic Typed است. این یعنی نوع داده به "مقدار" (Value) اختصاص دارد، نه به "متغیر". بنابراین یک متغیر میتواند در ابتدا یک رشته (String) باشد و سپس بدون هیچ خطایی، مقدار آن به یک عدد (Number) تغییر کند.
این موضوع در زبانهایی مثل Java یا #C متفاوت است؛ در آن زبانها شما باید نوع متغیر (مثلاً int یا string) را هنگام تعریف مشخص کنید و نمیتوانید بعداً نوع آن را تغییر دهید.
نکته: ابزارهایی مثل TypeScript وجود دارند که به ما اجازه میدهند به جاوااسکریپت قابلیت Static Typing (تعیین نوع ثابت) را اضافه کنیم تا کدها در پروژههای بزرگ ایمنتر باشند.
بررسی انواع داده با عملگر typeof
بیایید در محیط VS Code با استفاده از عملگر typeof نوع دادههای مختلف را بررسی کنیم:
بررسی Primitiveها:
const name = 'John Doe';
console.log(typeof name); // خروجی: string
const age = 45;
console.log(typeof age); // خروجی: number (حتی اگر 45.5 باشد)
const hasKids = true;
console.log(typeof hasKids); // خروجی: boolean
const car = null;
console.log(typeof car); // خروجی: object (یک باگ قدیمی در جاوااسکریپت!)
let test;
console.log(typeof test); // خروجی: undefined
نکته درباره Null: خروجی typeof null کلمه object را برمیگرداند. این در واقع یک خطا یا باگ در اولین نسخه جاوااسکریپت بوده که به دلیل حفظ پایداری کدهای قدیمی، هرگز اصلاح نشد. اما به یاد داشته باشید که null همچنان یک نوع داده Primitive است.
بررسی Referenceها:
const hobbies = ['movies', 'music'];
console.log(typeof hobbies); // خروجی: object
const address = {
city: 'Tehran',
state: 'Tehran'
};
console.log(typeof address); // خروجی: object
const today = new Date();
console.log(typeof today); // خروجی: object
جمعبندی
در این آموزش آموختیم:
- تفاوت بین حافظه Stack (برای Primitiveها) و Heap (برای Referenceها) چیست.
- جاوااسکریپت چگونه به صورت پویا (Dynamic) نوع دادهها را مدیریت میکند.
- چگونه با استفاده از
typeofنوع یک مقدار را تشخیص دهیم. - با ۶ نوع داده ابتدایی و انواع اصلی دادههای مرجع آشنا شدیم.
در آموزش بعدی، به سراغ تبدیل انواع (Type Conversion) میرویم؛ جایی که یاد میگیریم چگونه یک رشته را به عدد یا برعکس تبدیل کنیم.