فصل ۳: متغیرها و انواع داده در جاوااسکریپت

مقدمه
درک صحیح متغیرها و انواع داده، پایه اصلی برنامهنویسی با جاوااسکریپت است. بدون شناخت نحوه ذخیره دادهها و اعمال تغییرات بر آنها، هیچ پروژه واقعی و پویایی انجام نخواهد شد. در این فصل، با جزئیات کامل متغیرها، روشهای تعریف آنها، انواع دادههای بنیادی و مفاهیم مربوط به Type Conversion آشنا میشویم. همچنین تجربه عملی و بهترین شیوههای نگهداری و مدیریت دادهها را بررسی خواهیم کرد.
متغیر چیست؟
متغیر (Variable) مانند ظرفی است برای نگهداری داده؛ هر وقت لازم بود، میتوان مقدارش را تغییر داد یا داده جدیدی داخلش قرار داد. هر متغیر یک نام دارد با قواعد خاص (مثلاً نباید با عدد شروع شود، نباید از کلمات رزرو شده استفاده شود و…) و میتواند انواع مختلف دادهها را ذخیره کند.
مثال:
let city = "Shiraz";
city = "Isfahan"; // مقدار جدید جایگزین مقدار قبلی شد
- city یک متغیر است که ابتدا مقدار “Shiraz” را نگهمیدارد، سپس به “Isfahan” تغییر داده میشود.
نحوه تعریف متغیر در جاوااسکریپت
جاوااسکریپت سه روش اصلی برای اعلان متغیرها دارد:
۱. var (روش قدیمی – منسوخ شده برای پروژههای جدید)
- محدودیت سطح بلاک ندارد؛ باعث بروز مشکلات در خوانایی و مدیریت دادهها میشود.
- امروزه فقط برای مطالعه کُدهای قدیمی یا پروژههای قدیمی باید شناخته شود.
var name = "Ali";
name = "Hossein";
هشدار: از
varدر پروژههای مدرن استفاده نکنید مگر برای مطالعه یا سازگاری با کدهای قدیمی.
۲. let (روش استاندارد فعلی)
- مناسب برای تعریف متغیرهایی که مقدارشان در طی برنامه تغییر میکند.
- دامنه بلوکی (block scope) دارد؛ یعنی داخل بلوکهای
{}محدود میشود و امنیت داده بالاتری دارد.
let age = 25;
age = 30; // مقدار جدید به متغیر نسبت داده شد
۳. const (ثابت – تغییرناپذیر)
- فقط برای متغیرهایی که میدانید مقدارشان در طول برنامه هرگز تغییر نمیکند (مثل شماره ثابت، رنگ ثابت، رشته ثابت و …).
- اگر تلاش کنید مقدار
constرا تغییر دهید، خطا دریافت میکنید.
const PI = 3.14159;
// PI = 3; // -> Error: Assignment to constant variable.
جدول تفاوت var ، let و const
| ویژگی | var | let | const |
|---|---|---|---|
| قابل تغییر بودن | بله | بله | خیر |
| دامنه بلوکی | خیر (function scope) | بله (block scope) | بله (block scope) |
| تعریف مجدد | بله | خیر (در یک بلوک) | خیر |
| استفاده پیشنهادی | پروژههای قدیمی | زمانی که نیاز به تغییر | داده ثابت |
انواع دادهی اولیه (Primitive Data Types)
جاوااسکریپت مجموعهای از دادههای اولیه (primitives) دارد که باید حتماً با هرکدام و کاربردشان آشنا باشید:
۱. عدد (Number)
شامل اعداد صحیح و اعشاری است.
let score = 90;
let price = 39.99;
۲. رشته متنی (String)
متن یا کاراکترها. داخل “” یا ” یا “ (Backtick برای Template Literals) قرار میگیرد.
let name = "Sara";
let msg = 'سلام!';
let template = `سن: ${score}`;
۳. بولین (Boolean)
فقط دو مقدار: true یا false.
let isActive = true;
let isPassed = false;
۴. null
مقدار خالی، عمدی. یعنی متغیر هیچ دادهای ندارد (و فرد برنامهنویس عمداً این را تعیین کرده است).
let user = null;
۵. undefined
اگر متغیری تعریف شود اما مقداری به آن داده نشود، به صورت خودکار undefined است.
let address;
console.log(address); // undefined
تفاوت null و undefined
- undefined: به این معنی است که متغیر وجود دارد اما مقداری ندارد (ناشناخته یا فراموش شده).
- null: یعنی متغیر عمداً خالی قرار داده شده (مثلاً برای پاک شدن یک داده یا شروع خنثی).
تعیین نوع داده با typeof
عملگر typeof نوع هر متغیر یا مقدار را به صورت رشته بازمیگرداند. این روش برای تست نوع متغیر ضروری است.
let age = 20;
console.log(typeof age); // "number"
let city = "Tehran";
console.log(typeof city); // "string"
let isOk = false;
console.log(typeof isOk); // "boolean"
let user = null;
console.log(typeof user); // "object" (رفتار عجیب جاوااسکریپت؛ null نوع داده object است!)
نکته: typeof برای null مقدار
"object"نمایش میدهد (یکی از باگهای اولیه جاوااسکریپت).
تبدیل نوع داده (Type Conversion)
گاهی نیاز است دادهای را از یک نوع به نوع دیگر تبدیل کنید. این کار را هم میتوان دستی انجام داد، هم جاوااسکریپت گاهی خودش انجام میدهد (Type Coercion).
تبدیل عدد به رشته
let x = 10;
let str = String(x); // "10"
یا
let txt = x.toString(); // "10"
تبدیل رشته به عدد
let num = Number("22"); // 22
let realNum = parseFloat("17.45"); // 17.45
let intNum = parseInt("22.66"); // 22
تبدیل به Boolean
let truthy = Boolean("سلام"); // true
let falsy = Boolean(""); // false
let zero = Boolean(0); // false
let one = Boolean(1); // true
نمونه سیستمی (Type Coercion اتومات)
console.log("4" + 2); // "42" (عددی به رشته تبدیل میشود)
console.log("4" - 2); // 2 (رشته به عدد تبدیل میشود)
نکات مهم let و const و تفاوت آنها
- متغیر تعریفشده با let میتواند مقدار جدید بگیرد، اما با const غیرقابلتغییر است.
- تعریف const اجباراً نیاز به مقداردهی اولیه دارد.
- بهتر است در هرجایی که لازم نیست مقدار تغییر کند از const و در غیر اینصورت از let استفاده کنید (Best Practice).
- اگر متغیر فقط داخل بلاک خاص (مانند حلقه یا if) استفاده میشود، let یا const امنیت بیشتری فراهم میکند.
عیبیابی خطاهای متداول متغیرها
الف) فراموشی مقداردهی اولیه
let price;
console.log(price); // undefined
ب) تلاش برای تغییر مقدار const
const x = 7;
x = 10; // Uncaught TypeError: Assignment to constant variable.
ج) تعریف مجدد let یا const در یک بلوک
let n = 10;
// let n = 5; // SyntaxError: Identifier 'n' has already been declared
د) استفاده از var و مشکل دامنه
if (true) {
var v = 10;
}
console.log(v); // 10 – حتی بیرون از بلاک!
به همین دلیل استفاده از var فقط در کدهای قدیمی توصیه میشود.
بهترین شیوهها و توصیههای حرفهای
- از const برای ثابتها و let برای داده متغیر استفاده کنید.
- هرگز از var در کدهای جدید استفاده نکنید مگر دلیل خاصی داشته باشید.
- نام متغیرها باید معنادار و منعکسکننده داده باشد (مثلاً let userName بهتر از let a).
- در مقداردهی اولیه متغیرها دقت کنید تا از undefined جلوگیری شود.
- کد خود را مرتب و با فاصلههای مناسب بنویسید تا خوانایی بالا باشد.
- برای اطمینان از نوع داده متغیر، از typeof استفاده نمایید و در تبدیل نوع دقت کنید تا باگ ایجاد نشود.
- برای مقادیر پویا همیشه به مدیریت حافظه دقت کنید (در متغیرهای فراوان، دادههای بزرگ و …).
- از Template Literals (Backtick) برای رشتههای ترکیبی استفاده کنید:
let name = "Ali";
let greeting = `سلام، ${name}!`;
مثال عملی و تمرین
مثال ساده:
let username = "navid";
const yearOfBirth = 1385;
let isMember = true;
console.log(username); // navid
console.log(yearOfBirth); // 1385
console.log(isMember); // true
console.log(typeof username); // string
console.log(typeof yearOfBirth); // number
console.log(typeof isMember); // boolean
تمرین عملی:
۱. سه متغیر با let تعریف کنید (مثلاً نام، سن، وضعیت عضویت) و به آنها مقدار دلخواه دهید.
۲. نوع هر متغیر را با دستور console.log نمایش دهید.
۳. یکی از مقادیر را تغییر داده و مجدداً چاپ کنید.
نمونه پاسخ تمرین:
let name = "Amir";
let age = 21;
let isVip = false;
console.log(typeof name); // string
console.log(typeof age); // number
console.log(typeof isVip); // boolean
age = 25; // مقدار سن تغییر کرد
console.log(age); // 25
سوالات متداول
چرا استفاده از let و const امنتر است؟
به دلیل داشتن دامنه بلوکی (Block Scope) و جلوگیری از خطاهای غیرمنتظره (مثل بازنویسی ناخواسته متغیر).
چرا برای ثابتها باید از const استفاده کرد؟
باعث اطمینان از عدم تغییر مقادیر مهم و ثابت برنامه میشود و احتمال بروز خطا را کاهش میدهد.
اگر typeof برای null مقدار object برمیگرداند، چطور باید null را تشخیص داد؟
میتوانید علاوهبر typeof از عبارت زیر استفاده کنید:
if (myVar === null) { /* متغیر قطعاً null است */ }
جمعبندی فصل سوم
در این فصل یاد گرفتیم:
- متغیر چیست و چرا در برنامهنویسی ضروری است؛
- روشهای تعریف متغیر با let، const و var و تفاوتهای حساسشان؛
- انواع دادههای اولیه و نحوه کار با آنها؛
- چگونگی تبدیل نوع داده و کار با typeof؛
- نکات حرفهای، مدیریت خطا و تمرینهای عملی برای تثبیت یادگیری.