انتساب شیءآرایه
انتساب شیء و آرایه در جاوااسکریپت
در جاوااسکریپت، انتساب (Assignment) شیءها و آرایهها رفتار متفاوتی نسبت به انواع داده اولیه مانند اعداد و رشتهها دارد. این تفاوت به دلیل ماهیت ارجاعی این ساختارهای داده است.
شیءها و آرایهها در جاوااسکریپت به صورت ارجاعی (By Reference) منتقل میشوند، برخلاف انواع اولیه که به صورت مقداری (By Value) منتقل میشوند.
تفاوت انتساب مقدار و ارجاع
برای درک بهتر این مفهوم، به مثال زیر توجه کنید:
نوع داده | رفتار انتساب | مثال |
---|---|---|
اعداد/رشتهها | مقداری (Copy) | let a = 5; let b = a; |
شیءها/آرایهها | ارجاعی (Reference) | let obj1 = {}; let obj2 = obj1; |
مثالهای عملی
در اینجا چند سناریوی رایج را بررسی میکنیم:
- انتساب مستقیم:
- تغییر در شیء دوم، شیء اول را نیز تغییر میدهد
- هر دو متغیر به یک مکان در حافظه اشاره میکنند
- ایجاد کپی واقعی:
- استفاده از spread operator {...}
- استفاده از Object.assign()
- برای آرایهها: [...array] یا array.slice()
نکته مهم: حتی هنگام استفاده از روشهای کپیگیری سطحی (Shallow Copy)، اگر شیء دارای سطوح تو در تو باشد، فقط سطح اول کپی میشود و سطوح داخلی همچنان به صورت ارجاعی باقی میمانند.
برای اطلاعات بیشتر میتوانید اینجا را بررسی نمایید.
راهکارهای پیشرفته
برای کار با ساختارهای پیچیده، این روشها توصیه میشوند:
روش | کاربرد | محدودیت |
---|---|---|
JSON.parse/stringify | کپی عمیق ساده | عدم پشتیبانی از توابع و موارد خاص |
Lodash.cloneDeep | کپی عمیق حرفهای | نیاز به کتابخانه خارجی |
ساختارهای غیرقابل تغییر | مدیریت حالت در برنامههای پیچیده | پیچیدگی یادگیری |
درک صحیح از مکانیزم انتساب در جاوااسکریپت به شما کمک میکند از باگهای رایج در کار با شیءها و آرایهها جلوگیری کنید. برای مثالهای عملی بیشتر حتماً به این آموزش مراجعه نمایید.