متغیرها همانند سیمهایی هستن که به انواع مقدارها متصل میشوند به مثال انتصاب 'Narwhal' به متغیر pet توجه کنید.
let pet = 'Narwhal';
عملیات انتصاب یا =
در سمت چپ علامت = متغیر یا همان سیم ما با یک اسم مانند pet در مثال بالا قرار میگیرد و در قسمت راست یک مقدار ویا یک عبارت که حاصل اجرای آن عبارت توسط جاوااسکریپت محاسبه شده و در نهایت یک مقدار قرار میگیرد.
خواندن مقدار یک متغیر
در لحظهی اجرای کد زیر مقدار متغیر pet محاسبه شده و برای متد log ارسال میشود.
console.log(pet);
مقدار خروجی چاپ شده حاصل از اجرای کد زیر را شما حدس بزنید.
function double(x) {
x = x * 2;
}
let money = 10;
double(money);
console.log(money); // ?
اگر فرض ما بر این بود که با اجرای متغیر money برای متد double ارسال میشود انتظار میرفت که مقدار آن دوبرابر شود ولی در حقیقت مقدار آن متغیر در آن لحظه ارسال میشود و نه خود متغیر.
برای بهتر شکل گرفتن مدل ذهنیتان به مثال زیر و مدل گرافیکی متناظر با آن توجه کنید.
let x = 10;
let y = x;
x = 0;
سعی کنید یک مدل ذهنی برای قطعه کد زیر تصور کنید
let isSad = true;
let isHappy = !isSad; // The opposite
let isFeeling = isSad || isHappy; // Is at least one of them true?
let isConfusing = isSad && isHappy; // Are both true?
.
.
.
.
آیا به درستی به نتیجه مشابه دست یافتید؟ باید توجه کنید که انواع مقادیر اولیه یا primitive در این مدل ذهنی ما منحصر به فرد هستن و صرفا یک مقدار true و یک مقدار false از نوع Boolean در دنیای جاوااسکریپت وجود دارد.
حال اجازه دهید به تفاوت بین مقادیر دستهی primitive و objects and functions بپردازیم. یکی دیگر از تفاوتهای دستهی دوم علاوه بر قابل تغییر بودن آنها این است که میتوان مقادیر جدیدی از آن در دنیای جاوااسکریپت تولید کرد که صرفا مانند مقادیر دستهی primitive ثابت و یکتا نیستند. به مثالهای زیر توجه کنید.
سعی کنید یک مدل ذهنی از کدهای زیر که عملیات انتصاب یک مقدار از دستهی مقادیر primitive است را تصور کنید.
let sisters = 3;
let musketeers = 3;
حال مدل ذهنی انتصاب چند مقدار از نوع object که ما هر بار در هر خط با استفاده از {} یک نمونه جدید از آن را ایجاد کردیم مقایسه کنید.
سعی کنید حدس بزنید در هر کدام از ۳ حلقه for زیر چه تعداد از نوعهای متفاوت از مقادیر به متد console.log ارسال شد.
for (let i = 0; i < 7; i++) {
console.log(2);
}
for (let i = 0; i < 7; i++) {
console.log({});
}
for (let i = 0; i < 7; i++) {
console.log(function() {});
}
وقتی حلقه اول ۷ مرتبه اجرا میشود، ۷ بار تنها یک مقدار 2 که از نوع primitive میباشد یعنی آن عدد 2 صرفا یک شیئ منحصربفرد در دنیای جاوااسکریپت است.
اما پس از اجرای حلقه دوم و سوم ۷ شیئ متفاوت و متمایز در دنیای جاوااسکریپت ایجاد شده و به متد console.log ارسال میشود.