مقدارهای اولیه و مراجع ECMAScript

در ECMAScript، متغیرها می‌توانند دو نوع مقادیر داشته باشند، یعنی مقادیر اولیه و مقادیر ارجاعی.

مقادیر اولیه و ارجاعی

در ECMAScript، متغیرها می‌توانند دو نوع مقادیر داشته باشند، یعنی مقادیر اولیه و مقادیر ارجاعی.

مقادیر اولیه
بخش‌های ساده داده در حافظه پیکربندی (stack)، یعنی مقادیر مستقیماً در مکان‌های دسترسی متغیر ذخیره می‌شوند.
ارجاع‌ها
اشیاء ذخیره شده در حافظه پیکربندی (heap)، یعنی مقدار ذخیره شده در متغیر یک اشاره‌گر (pointer) است که به حافظه‌ای که اشیاء در آن ذخیره شده‌اند اشاره دارد.

در هنگام تعیین مقادیر برای متغیرها، برنامه‌ی تفسیر ECMAScript باید تعیین کند که آیا این مقدار نوع اولیه یا نوع ارجاعی است. برای انجام این کار، برنامه‌ی تفسیر باید تلاش کند تاآیا این مقدار یکی از نوع‌های اولیه ECMAScript استیعنی Undefined، Null، Boolean، Number و String. به دلیل اینکه فضای این نوع‌های اولیه ثابت است، می‌توان آن‌ها را در یک فضای کوچک‌تر از حافظه - پیکربندی (stack) ذخیره کرد. این ذخیره‌سازی به سرعت جستجو برای مقادیر متغیرها کمک می‌کند.

در بسیاری از زبان‌ها، رشته‌ها به عنوان نوع ارجاعی در نظر گرفته می‌شوند، نه نوع اولیه، زیرا طول رشته‌ها قابل تغییر است. ECMAScript این سنت را شکسته است.

اگر یک مقدار نوع ارجاعی باشد، فضای ذخیره‌سازی آن از حافظه پیکربندی (heap) تخصیص داده می‌شود. به دلیل اینکه اندازه ارجاع‌ها می‌تواند تغییر کند، نمی‌توان آن‌ها را در فضای پیکربندی (stack) قرار داد، زیرا این کار می‌تواند سرعت جستجو برای متغیرها را کاهش دهد. به جای آن، مقدار ذخیره شده در فضای پیکربندی (stack) یک آدرس است که به حافظه‌ای که اشیاء در آن ذخیره شده‌اند اشاره دارد. اندازه آدرس ثابت است، بنابراین ذخیره‌سازی آن در فضای پیکربندی (stack) هیچ تأثیری بر عملکرد متغیرها ندارد. در تصویر زیر مشاهده می‌کنید:

مقدار اولیه و ارجاعی ذخیره شده در قلعه و استک

نوع اولیه

همانطور که قبلاً ذکر شد، ECMAScript دارای 5 نوع اولیه است (primitive type)، یعنی Undefined، Null، Boolean، Number و String. ECMA-262 اصطلاحنوع (type)یک مجموعه از مقادیر تعریف شده است، هر نوع اولیه دامنه مقادیر خود را و نمونه‌های لغوی آن را تعریف می‌کند.

ECMAScript عملگر typeof را ارائه می‌دهد تا بتوانید تعیین کنید که یک مقدار در یک رنج نوع خاص قرار دارد یا خیر. می‌توانید با این عملگر تعیین کنید که آیا یک مقدار نوع اولیه است و همچنین می‌توانید تعیین کنید که نوع اولیه آن چیست.

در فصل‌های بعدی، ما به شما توضیح خواهیم داد که نوع‌های اولیه و نوع‌های ارجاعی ECMAScript را چگونه به شما آموزش خواهیم داد.