درس ۱۲: متغیرها و انواع داده
یادگیری متغیرها و انواع داده در JavaScript
متغیرها چیستند؟
متغیرها در JavaScript مانند ظرفهایی هستند که میتوانند انواع مختلف داده را در خود نگهداری کنند. آنها به ما امکان ذخیره، دسترسی و تغییر اطلاعات را میدهند.
تشبیه ساده:
متغیر مانند یک جعبه است که:
- نام دارد: برای شناسایی آن
- محتوا دارد: دادهای که در آن ذخیره شده
- قابل تغییر است: میتوان محتوای آن را عوض کرد
- نوع دارد: نوع دادهای که نگهداری میکند
تعریف متغیر در JavaScript
در JavaScript سه روش برای تعریف متغیر وجود دارد:
۱. var (روش قدیمی):
var name = 'علی';
var age = 25;
۲. let (روش مدرن):
let name = 'علی';
let age = 25;
۳. const (ثابت):
const PI = 3.14159;
const siteName = 'وبسایت من';
تفاوتهای مهم:
ویژگی | var | let | const |
---|---|---|---|
قابل تغییر | ✅ | ✅ | ❌ |
محدوده بلوک | ❌ | ✅ | ✅ |
تعریف مجدد | ✅ | ❌ | ❌ |
مقداردهی اولیه | اختیاری | اختیاری | اجباری |
قوانین نامگذاری متغیرها
برای نامگذاری متغیرها در JavaScript قوانین خاصی وجود دارد:
قوانین اجباری:
- باید با حرف، _ یا $ شروع شود
- نمیتواند با عدد شروع شود
- فقط حروف، اعداد، _ و $ مجاز است
- نمیتواند کلمه کلیدی باشد
- حساس به حروف کوچک و بزرگ است
مثالهای صحیح:
let userName = 'علی';
let user_name = 'علی';
let $price = 1000;
let _id = 123;
let firstName = 'محمد';
let age25 = 25;
مثالهای نادرست:
let 2name = 'علی'; // شروع با عدد
let user-name = 'علی'; // استفاده از -
let class = 'A'; // کلمه کلیدی
let user name = 'علی'; // فاصله
بهترین شیوهها:
- camelCase: firstName, lastName
- نامهای معنادار: age به جای a
- ثابتها با حروف بزرگ: MAX_SIZE
- متغیرهای بولی: isActive, hasPermission
تمرین عملی: متغیرها و انواع داده
در ادامه، با انواع مختلف متغیرها و دادهها آزمایش کنید:
انواع داده در JavaScript
JavaScript دارای انواع مختلف داده است که به دو دسته کلی تقسیم میشوند:
۱. انواع ابتدایی (Primitive Types):
Number (عدد):
let age = 25; // عدد صحیح
let price = 99.99; // عدد اعشاری
let negative = -10; // عدد منفی
let infinity = Infinity; // بینهایت
let notANumber = NaN; // Not a Number
String (رشته):
let name = 'علی'; // تک کوتیشن
let message = "سلام دنیا"; // دابل کوتیشن
let template = \`سلام \${name}\`; // Template literal
Boolean (بولی):
let isActive = true;
let isComplete = false;
let hasPermission = true;
undefined:
let x; // undefined
let y = undefined; // صراحتاً undefined
null:
let data = null; // مقدار خالی
Symbol (ES6):
let sym = Symbol('id'); // شناسه یکتا
BigInt (ES2020):
let bigNumber = 123456789012345678901234567890n;
انواع داده پیچیده (Reference Types)
Object (شی):
let person = {
name: 'علی',
age: 25,
city: 'تهران'
};
// دسترسی به ویژگیها
console.log(person.name); // علی
console.log(person['age']); // 25
Array (آرایه):
let numbers = [1, 2, 3, 4, 5];
let fruits = ['سیب', 'موز', 'پرتقال'];
let mixed = [1, 'سلام', true, null];
// دسترسی به عناصر
console.log(numbers[0]); // 1
console.log(fruits[1]); // موز
Function (تابع):
function greet(name) {
return 'سلام ' + name;
}
let sayHello = function(name) {
return 'درود ' + name;
};
// Arrow function
let welcome = (name) => \`خوش آمدید \${name}\`;
Date (تاریخ):
let now = new Date();
let birthday = new Date('1995-05-15');
let timestamp = Date.now();
تشخیص نوع داده
برای تشخیص نوع داده از عملگر typeof استفاده میکنیم:
console.log(typeof 42); // "number"
console.log(typeof 'سلام'); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (باگ تاریخی!)
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function(){}); // "function"
روشهای دقیقتر:
// برای آرایهها
Array.isArray([1, 2, 3]); // true
// برای null
value === null; // true
// برای NaN
Number.isNaN(NaN); // true
// برای اشیاء
Object.prototype.toString.call(value);
تبدیل انواع داده
JavaScript قابلیت تبدیل خودکار و دستی انواع داده را دارد:
تبدیل خودکار (Type Coercion):
let result1 = '5' + 3; // "53" (string)
let result2 = '5' - 3; // 2 (number)
let result3 = '5' * 3; // 15 (number)
let result4 = true + 1; // 2 (number)
تبدیل دستی:
به عدد:
Number('123'); // 123
parseInt('123px'); // 123
parseFloat('12.34'); // 12.34
+'123'; // 123 (روش کوتاه)
به رشته:
String(123); // "123"
(123).toString(); // "123"
123 + ''; // "123" (روش کوتاه)
به بولی:
Boolean(1); // true
Boolean(0); // false
Boolean(''); // false
Boolean('سلام'); // true
!!'سلام'; // true (روش کوتاه)
مقادیر Falsy و Truthy
در JavaScript برخی مقادیر به false و برخی به true تبدیل میشوند:
مقادیر Falsy (معادل false):
false
0
-0
0n
(BigInt)""
(رشته خالی)null
undefined
NaN
مقادیر Truthy (معادل true):
همه مقادیر دیگر، از جمله:
true
- اعداد غیر صفر
- رشتههای غیر خالی
- اشیاء و آرایهها (حتی خالی)
- توابع
مثال عملی:
if ('') {
console.log('اجرا نمیشود'); // falsy
}
if ('سلام') {
console.log('اجرا میشود'); // truthy
}
if ([]) {
console.log('اجرا میشود'); // آرایه خالی truthy است
}
محدوده متغیرها (Scope)
محدوده تعیین میکند که متغیر در کجا قابل دسترسی است:
محدوده سراسری (Global Scope):
var globalVar = 'سراسری';
let globalLet = 'سراسری';
function test() {
console.log(globalVar); // قابل دسترسی
console.log(globalLet); // قابل دسترسی
}
محدوده تابع (Function Scope):
function myFunction() {
var functionVar = 'محلی تابع';
let functionLet = 'محلی تابع';
console.log(functionVar); // قابل دسترسی
console.log(functionLet); // قابل دسترسی
}
// console.log(functionVar); // خطا!
محدوده بلوک (Block Scope):
if (true) {
var blockVar = 'var در بلوک';
let blockLet = 'let در بلوک';
const blockConst = 'const در بلوک';
}
console.log(blockVar); // قابل دسترسی (var)
// console.log(blockLet); // خطا! (let)
// console.log(blockConst); // خطا! (const)
تمرینهای عملی
برای تسلط بیشتر بر مطالب این درس، تمرینهای زیر را انجام دهید:
تمرین ۱: تعریف متغیرها
متغیرهایی برای نگهداری اطلاعات شخصی (نام، سن، شهر) تعریف کنید.
تمرین ۲: تشخیص نوع داده
مقادیر مختلف ایجاد کرده و نوع آنها را با typeof بررسی کنید.
تمرین ۳: تبدیل انواع
رشتهای حاوی عدد را به عدد تبدیل کرده و محاسبه انجام دهید.
تمرین ۴: محدوده متغیرها
متغیرهایی در محدودههای مختلف تعریف کرده و دسترسی آنها را تست کنید.
نکات مهم و بهترین شیوهها
بهترین شیوهها:
- از let و const به جای var استفاده کنید
- const را برای مقادیر ثابت ترجیح دهید
- نامهای معنادار برای متغیرها انتخاب کنید
- متغیرها را در کوچکترین محدوده ممکن تعریف کنید
- همیشه متغیرها را مقداردهی اولیه کنید
نکات عملکرد:
- تبدیل نوع خودکار میتواند کند باشد
- از === به جای == استفاده کنید
- متغیرهای سراسری را محدود کنید
- از نامهای کوتاه برای متغیرهای محلی استفاده کنید
اشتباهات رایج:
- استفاده از var در کد مدرن
- فراموش کردن تعریف متغیر (ایجاد متغیر سراسری)
- اشتباه در تبدیل انواع داده
- استفاده از نامهای مبهم برای متغیرها
- عدم درک تفاوت null و undefined
ادامه یادگیری
در درس بعدی با عملگرها و دستورات شرطی در JavaScript آشنا خواهید شد.