انتساب شیءآرایه

انتساب شیء و آرایه در جاوااسکریپت

در جاوااسکریپت، انتساب (Assignment) شیءها و آرایه‌ها رفتار متفاوتی نسبت به انواع داده اولیه مانند اعداد و رشته‌ها دارد. این تفاوت به دلیل ماهیت ارجاعی این ساختارهای داده است.

شیءها و آرایه‌ها در جاوااسکریپت به صورت ارجاعی (By Reference) منتقل می‌شوند، برخلاف انواع اولیه که به صورت مقداری (By Value) منتقل می‌شوند.

تفاوت انتساب مقدار و ارجاع

برای درک بهتر این مفهوم، به مثال زیر توجه کنید:

نوع داده رفتار انتساب مثال
اعداد/رشته‌ها مقداری (Copy) let a = 5; let b = a;
شیءها/آرایه‌ها ارجاعی (Reference) let obj1 = {}; let obj2 = obj1;

مثال‌های عملی

در اینجا چند سناریوی رایج را بررسی می‌کنیم:

  1. انتساب مستقیم:
    • تغییر در شیء دوم، شیء اول را نیز تغییر می‌دهد
    • هر دو متغیر به یک مکان در حافظه اشاره می‌کنند
  2. ایجاد کپی واقعی:
    • استفاده از spread operator {...}
    • استفاده از Object.assign()
    • برای آرایه‌ها: [...array] یا array.slice()

نکته مهم: حتی هنگام استفاده از روش‌های کپی‌گیری سطحی (Shallow Copy)، اگر شیء دارای سطوح تو در تو باشد، فقط سطح اول کپی می‌شود و سطوح داخلی همچنان به صورت ارجاعی باقی می‌مانند.

برای اطلاعات بیشتر می‌توانید اینجا را بررسی نمایید.

راهکارهای پیشرفته

برای کار با ساختارهای پیچیده، این روش‌ها توصیه می‌شوند:

روش کاربرد محدودیت
JSON.parse/stringify کپی عمیق ساده عدم پشتیبانی از توابع و موارد خاص
Lodash.cloneDeep کپی عمیق حرفه‌ای نیاز به کتابخانه خارجی
ساختارهای غیرقابل تغییر مدیریت حالت در برنامه‌های پیچیده پیچیدگی یادگیری

درک صحیح از مکانیزم انتساب در جاوااسکریپت به شما کمک می‌کند از باگ‌های رایج در کار با شیءها و آرایه‌ها جلوگیری کنید. برای مثال‌های عملی بیشتر حتماً به این آموزش مراجعه نمایید.