جلسه ۳ - رشته ها ، اعداد و مقادیر منطقی

پاسخ‌های بخش ۲:

**پاسخ ۱:

  • متغیر number با var به بالا منتقل (hoist) می‌شود اما مقداردهی نمی‌شود، بنابراین undefined چاپ می‌شود.

**پاسخ ۲:

  • خط اول: ✅ کار می‌کند چون محتوای آرایه را تغییر می‌دهیم، نه خود متغیر colors را
  • خط دوم: ❌ خطا می‌دهد چون سعی می‌کنیم متغیر const را به یک آرایه جدید نسبت دهیم

**پاسخ ۳:

  • هر دو block-scoped هستند
  • هر دو hoist می‌شوند اما قبل از مقداردهی قابل استفاده نیستند (Temporal Dead Zone)
  • متغیر از نوع const بعد از مقداردهی اولیه قابل reassignment نیست
  • اما محتوای object/arrayهای const قابل تغییر است

خلاصه تفاوت‌های مهم:

ویژگیvarletconst
Scopeتابعیبلوکیبلوکی
قابل تغییر
Hoisting✅ (با undefined)✅ (اما قبل از مقداردهی خطا می‌دهد)✅ (اما قبل از مقداردهی خطا می‌دهد)
مقداردهی اولیهاختیاریاختیاریالزامی

بخش ۳: انواع داده - اطلاعاتی که ذخیره می‌کنیم

۱. رشته (String) - برای متن‌ها

let name = "سارا";
let message = 'سلام دنیا!';
let template = `سلام ${name}`; // روش جدید با قابلیت قراردادن متغیر

متدهای مفید رشته:

let text = "  JavaScript  ";
 
console.log(text.length); // 13 (طول رشته)
console.log(text.trim()); // "JavaScript" (حذف فضاهای اضافه)
console.log(text.toUpperCase()); // "  JAVASCRIPT  "
console.log(text.toLowerCase()); // "  javascript  "
console.log(text.includes("Java")); // true
console.log(text.slice(2, 6)); // "Java" (برش رشته)

۲. عدد (Number) - برای محاسبات

let integer = 42;      // عدد صحیح
let decimal = 3.14;    // عدد اعشاری
let negative = -10;    // عدد منفی

متدهای مفید عدد:

let num = 123.456;
 
console.log(num.toFixed(2)); // "123.46" (گرد کردن)
console.log(num.toString()); // "123.456" (تبدیل به رشته)
 
// تبدیل رشته به عدد
console.log(parseInt("100px")); // 100
console.log(parseFloat("3.14cm")); // 3.14

مقادیر خاص:

console.log(1 / 0);        // Infinity
console.log(-1 / 0);       // -Infinity  
console.log("text" * 2);   // NaN (Not a Number)

۳. بولین (Boolean) - درست یا غلط

let isActive = true;
let isEmpty = false;

مقادیر truthy و falsy:

  • falsy values: false, 0, "", null, undefined, NaN
  • بقیه مقادیر truthy هستند (حتی "0", "false", [], {})
// مثال‌های کاربردی
if ("") {
    console.log("این اجرا نمی‌شود"); // "" falsy است
}
 
if ("سلام") {
    console.log("این اجرا می‌شود"); // هر رشته غیرخالی truthy است
}
 
if (0) {
    console.log("این اجرا نمی‌شود"); // 0 falsy است
}

سؤالات تمرینی بخش ۳:

۱. خروجی کد زیر چیست؟

let price = "200";
let tax = "20";
console.log(price + tax);
console.log(parseInt(price) + parseInt(tax));

۲. کدام عبارت‌های زیر true برمی‌گردانند؟

Boolean("")           // اول
Boolean("0")          // دوم  
Boolean(0)            // سوم
Boolean([])           // چهارم

۳. مشکل کد زیر چیست؟ چگونه اصلاح می‌شود؟

let userAge = "25سال";
let ageAfter5Years = userAge.toFixed() + 5;