جستجو برای:
  • خانه
  • دوره و کتاب
  • مقالات
    • خانواده جاوا اسکریپت
      • مقالات جاوا اسکریپت
      • مقالات ری اکت و نکست
      • هوش مصنوعی
    • خانواده فرانت
      • مقالات سی اس اس
      • مقالات اچ تی ام ال
    • محیط کار
      • سوالات استخدامی جاوا اسکریپت
      • سوالات استخدامی ری اکت
      • اصطلاحات محیط کار فرانت اند
    • مجله پرنیان
      • تصاویر دوره ها
      • نظرات دانشجویان قدیم
  • سوالات متداول
  • تماس با ما
  • خانواده پرنیان
    • چت خانه
    • دستیار هوش مصنوعی(رایگان!)
    • تایید مدارک
    • پیام یا انتقاد (ناشناس)
    • تعیین سطح زبان انگلیسی
    • پخش لایو رادیوسام
 
  • 09921632445
  • radioarsam[at]gmail.com
  • فروشگاه محصولات
  • بلاگ
  • تماس با ما
  • درباره پارسا قربانیان، موسس مدرسه پرنیان
پارسا قربانیان |گروه آموزشی پرنیان | آموزش حرفه ای طراحی سایت
  • خانه
  • دوره و کتاب
  • مقالات
    • خانواده جاوا اسکریپت
      • مقالات جاوا اسکریپت
      • مقالات ری اکت و نکست
      • هوش مصنوعی
    • خانواده فرانت
      • مقالات سی اس اس
      • مقالات اچ تی ام ال
    • محیط کار
      • سوالات استخدامی جاوا اسکریپت
      • سوالات استخدامی ری اکت
      • اصطلاحات محیط کار فرانت اند
    • مجله پرنیان
      • تصاویر دوره ها
      • نظرات دانشجویان قدیم
  • سوالات متداول
  • تماس با ما
  • خانواده پرنیان
    • چت خانه
    • دستیار هوش مصنوعی(رایگان!)
    • تایید مدارک
    • پیام یا انتقاد (ناشناس)
    • تعیین سطح زبان انگلیسی
    • پخش لایو رادیوسام
0

ورود و ثبت نام

بلاگ پرنیان

پارسا قربانیان |گروه آموزشی پرنیان | آموزش حرفه ای طراحی سایتبلاگمقالاتمقالات phpتفاوت دیتا‌تایپ های refrence و primitive

تفاوت دیتا‌تایپ های refrence و primitive

25 آگوست 2022
ارسال شده توسط trainingsitedesign
بلاگ پرنیان ، مقالات ، مقالات php ، مقالات جاوا اسکریپت
543 بازدید
تفاوت دیتا‌تایپ های refrence و primitive

در این اموزش قصد داریم با دو نوع مختلف از دیتاتایپ ها و تفاوت انهادر جاوااسکریپت اشنا شویم.

متغیر های primitive و refrence

به طور کلی متغیر ها در زبان جاوااسکریپت دردودسته کلی متغیر های primitive  و متغیر های refrence  جای میگیرند .

متغیرهای primitive :

number , string , bolean , undefine, null, symbol,BigInt

متغیر های refrence :

objects  (ارایه ها و فانکشن ها زیرمجموعه ی ابجکت به حساب می ایند )

Untitled5 1

تفاوت دیتاتایپ primitive و refrence

۱-نحوه ذخیره سازی داده

هنگام تعریف یک متغیر در جاوا اسکریپت ، موتور جاوااسکریپت با توجه به نوع داده اختصاص داده شده به متغیر، مکانی از حافظه را با ساختار داده هیپ (heap) یا پشته(stack) به آن اختصاص میدهد.

حافظه پشته (stack) نوعی از حافظه است که سرعت دسترسی بالایی اما فضای محدودی دارد; بنابراین نمی‌تواند دیتای زیادی را در خود ذخیره کند و درصورت وارد شدن دیتای بیش از حد ظرفیت سرریزمیشود (stack over flow) به همین دلیل، این نوع حافظه مناسب دیتا تایپ‌های primitive است. چون برخلاف  آبجکت‌ها ، آرایه‌ها و فانکشن‌ها، primitiveها حجم زیادی ندارند و اندازه آنها ثابت است.

برعکس متغیرهای primitive متغیرهای refrence  اندازه ثابتی ندارند و امکان دارد در زمان کامپایل اندازه آن عوض شود ; بنابراین جاوااسکریپت آبجکت ها را درون هیپ(heap) ذخیره می کند. ابتدا موتور جاوااسکریپت یک حافظه ثابت داخل پشته برای آن متغیرایجاد کرده و آدرس حافظه قرارگیری دیتا را در آن ذخیره می کند و دیتای اصلی را درون هیپ نگهداری می کند در آینده هر زمان که به حافظه بیشتری نیاز پیدا شد درون هیپ به آن اختصاص دهد.

همانطور که در تصویر زیر می بینید  برای متغیر name  و age  که از نوع primitive  هستند یک خانه در پشته در نظر گرفته شده و کل متغیر و دیتای آن داخل این خانه ذخیره شده است و برای متغیر person  که از نوع refrence  است ، آدرس نگهداری دیتای آن درون پشته ذخیره شده و خود دیتا درون هیپ وجود دارد.

Untitled2

۲-کپی کردن متغیر

هنگامی که یک متغیر primitive  را درون متغیر دیگری کپی میکنیم یک کپی از دیتای آن داخل متغیر دوم ذخیره میگردد و متغیر دوم به صورت کاملاً مستقل از متغیر اول عمل میکند به صورتی که با عوض کردن مقدار متغیر دوم تغییری در مقدار متغیر اول ایجاد نمیشود (و برعکس). همانگونه که در تصویر زیر میبینید متغیرname1  با مدار اولیه “shima”  مقداردهی شده است . یک کپی از name1 داخل متغیرname2  میریزیم و سپس مقدار name1 را به “Zahra”  تغییر میدهیم .

همانظور که مشاهده میکنید در انتها درون متغیر name1 مقدار “Zahra” و در متغیر name2 مقدار “shima”  وجود دارد .

Untitled8 1

اما این موضوع در مواجهه با متغیر های refrence  متفاوت است ، بدین صورت که هنگام کپی کردن یک متغیر refrence درون یک متغیر دیگر تنها ادرس حافظه ای که دیتای متغیر اول قرار دارد (همان چیزی که در پشته ذخیره شده است) داخل متغیر دوم کپی میشود و این متغیر به همان دیتای متغیر اول اشاره میکند ; بنابراین با تغییر مقادیر دیتای هرکدام از متغیرها دیتای متغیر دیگر هم عوض میشود.

همان طور که در مثال زیر میبینید ابجکت person  داخل newperson کپی شده است و ادرس حافطه دیتای person  در newperson کپی شده است و هر دو به یک مکان حافظه اشاره دارند.سپس name را در متغیر newperson به “shima” تغییر دادیم همانظور که میبینید چون هردو ابجکت به یک ادرس اشاره دارند مقادیر هر دو عوض میشود.

Untitled10

۳-مقایسه ی دو متغیر

در هنگام مقایسه دو متغیر primitive ، مقدار دیتای انها با هم مقایسه میگردد و درصورت یکی بودن true  را برمیگرداند اما دو متغیر refrence هنگام مقایسه ادرس انها که در پشته ذخیره شده است با هم مقایسه میگردد. به عبارت دیگر حتی دو ارایه یا دو ابجکت با مقادیر کاملا یکسان با یکدیگر برابر نیستند چون دو ادرس حافظه متفاوت دارند. در مثال زیر میبینید که دو ابجکت person و newperson با هم برابرند چون ادرس حافظه انها با هم برابر است ; اما ابجکت person و person1 حتی با اینکه مقادیر یکسانی دارند یکی نیستند چراکه ادرس حافظه انها با هم یکی نیست و هر یک به ادرس اختصاصی خودش اشاره دارد.

Untitled6

امیدواریم از این مقاله نهایت استفاده را برده باشید و آن را با دوستانتان به اشتراک بگذارید. تیم تولید محتوای مدرسه اینترنتی پرنیان این مقاله را تهیه کرده است.

اشتراک گذاری:
در تلگرام
کانال ما را دنبال کنید!
در اینستاگرام
ما را دنبال کنید!
در یوتوب
ما را دنبال کنید!
Created by potrace 1.14, written by Peter Selinger 2001-2017
در آپارات
ما را دنبال کنید!

مطالب زیر را حتما مطالعه کنید

Vibe Coding چیست؟ آیا آینده برنامه‌نویسی تغییر کرده است؟
Vibe Coding چیست؟ آیا آینده برنامه‌نویسی تغییر کرده است؟
MCP چیست
MCP چیست و چرا آینده برنامه‌نویسی با هوش مصنوعی را تغییر می‌دهد؟
تفاوت HTMLCollection و NodeList در جاوا اسکریپت
تفاوت HTMLCollection و NodeList در جاوا اسکریپت
State Normalization در فرانت‌اند چیست؟
State Normalization در فرانت‌اند چیست؟
حفظ روحیه برنامه نویسان در شرایط جنگی
حفظ روحیه برنامه نویسان در شرایط جنگی
خبر فوری
اطلاعیه مهم درباره شروع کلاس ها
قدیمی تر ساخت نوار اسکرول بار اختصاصی در جاوا اسکریپت
جدیدتر جامع ترین لیست سوالات استخدامی react

2 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • ناشناس گفت:
    20 آوریل 2024 در 1:02 ب.ظ

    سلام و خسته نباشید.

    عالی بود مرسی واقعا

    پاسخ
    • trainingsitedesign گفت:
      22 آوریل 2024 در 8:48 ب.ظ

      سپاس

      پاسخ

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
نوشته‌های تازه
  • Vibe Coding چیست؟ آیا آینده برنامه‌نویسی تغییر کرده است؟
  • MCP چیست و چرا آینده برنامه‌نویسی با هوش مصنوعی را تغییر می‌دهد؟
  • تفاوت HTMLCollection و NodeList در جاوا اسکریپت
  • State Normalization در فرانت‌اند چیست؟
  • حفظ روحیه برنامه نویسان در شرایط جنگی
دسته‌ها
دوره ها:

کلاس های درحال ثبت نام فرانت اند: 

  • دوره فرانت اند صبح از اوایل آبان
  • دوره جاوا اسکریپت و ری اکت از 31مرداد

دوره فرانت اند پرنیان

 

مدرسه فرانت اند پرنیان

گروه آموزشی پرنیان از سال 92 تاسیس شده و تاکنون ده ها دوره طراحی وب ، CMS ، سئو و بوت کمپ فرانت اند به صورت حضوری و غیر حضوری برگزار کرده است. ما در پرنیان جدیدترین و کاربردی ترین مباحث طراحی و توسعه وب ، سئو و دیجیتال مارکتینگ رو آموزش داده و راه ورود شما عزیزان به بازار کار را هموار کرده ایم.

فهرست سفارشی
  • بلاگ
  • تماس با ما
  • حساب کاربری من
  • درباره پارسا قربانیان، موسس مدرسه پرنیان
  • سبد خرید
  • فروشگاه

لوگوی مدرسه پرنیان

تمام حقوق برای مدرسه فرانت اند پرنیان محفوظ است. سیاست حفظ حریم شخصی

ورود

رمز عبور را فراموش کرده اید؟

هنوز عضو نشده اید؟ عضویت در سایت