متن خبر

نحوه استفاده از WeakMap و WeakSet در جاوا اسکریپت

نحوه استفاده از WeakMap و WeakSet در جاوا اسکریپت

شناسهٔ خبر: 526652 -




جاوا اسکریپت تعدادی ابزار برای سازماندهی و مدیریت داده ها ارائه می دهد. و در حالی که توسعه دهندگان اغلب از ابزارهای شناخته شده ای مانند Maps و Sets استفاده می کنند، ممکن است اغلب برخی منابع ارزشمند دیگر را نادیده بگیرند.

به عنوان مثال، آیا با WeakMap و WeakSet آشنایی دارید؟ آنها ابزارهای ویژه ای در جاوا اسکریپت هستند که به ذخیره و مدیریت داده ها به روش های منحصر به فردی کمک می کنند.

این مقاله WeakMap و WeakSet را به روشی واضح و جامع تحلیل می کند. ما با درک مفهوم مراجع ضعیف و تفاوت آنها با ساختارهای داده سنتی شروع خواهیم کرد. سپس، ما عمیق‌تر به هر مفهوم می‌پردازیم و توضیح می‌دهیم که آنها چیستند، چگونه آنها را ایجاد کنیم و روش‌هایی را که ارائه می‌دهند.

در طول مسیر، نمونه‌های عملی را مشاهده خواهیم کرد که چگونه WeakMap و WeakSet می‌توانند کد شما را ساده‌سازی کنند و قفل امکانات جدید را باز کنند.

چه یک حرفه ای جاوا اسکریپت باشید و چه تازه شروع به کار کرده اید، درک WeakMap و WeakSet شما را قادر می سازد کدهای تمیزتر و کارآمدتر بنویسید.

فهرست مطالب

    WeakMap چیست؟
    - ویژگی های کلیدی WeakMap

    نحوه ایجاد WeakMap با استفاده از new WeakMap() Constructor

    موارد استفاده رایج برای WeakMap

    روش های WeakMap

    WeakSet چیست؟
    - ویژگی های کلیدی WeakSet

    نحوه ایجاد WeakSet با استفاده از سازنده new WeakSet()

    موارد استفاده رایج برای WeakSet

    روش های WeakSet

    WeakSet در مقابل WeakMap

    نتیجه

WeakMap چیست؟

WeakMap یک ساختار داده جاوا اسکریپت داخلی است که در ECMAScript 6 (ES6) معرفی شده است. این برای ذخیره جفت های کلید-مقدار در جایی است که کلیدها باید اشیاء باشند و مقادیر می توانند دلخواه باشند.

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

ویژگی های کلیدی WeakMap

کلیدهای فقط شی:

WeakMap فقط اشیا را به عنوان کلید می پذیرد. اگر سعی کنید از یک کلید غیر شی، مانند رشته یا عدد استفاده کنید، منجر به TypeError می شود.

 const weakMap = new WeakMap(); const key = {}; // Valid key, as it's an object const invalidKey = 'string'; // Invalid key, as it's not an object weakMap.set(key, 'value'); // This will work weakMap.set(invalidKey, 'value'); // TypeError: Invalid value used as weak map key

مجموعه زباله کلیدها:

WeakMap به کلیدها اجازه می دهد تا زمانی که هیچ مرجع دیگری به آنها وجود ندارد، زباله جمع آوری شود. این بدان معناست که اگر شیئی که به عنوان کلید در WeakMap استفاده می شود، دیگر به هیچ جای دیگر برنامه ارجاع داده نشود، می توان آن را به طور خودکار از WeakMap حذف کرد.

 let key = {name: 'John'}; const weakMap = new WeakMap(); weakMap.set(key, 'value'); key = null; // Removing the reference to the key // At this point, since there are no other references to the key object, // it can be garbage collected, and the key-value pair in the WeakMap will be automatically removed

بدون شمارش کلیدها:

برخلاف اشیاء معمولی Map، WeakMap متدهایی را برای شمارش کلیدهای خود، مانند keys() ، values() یا entries() نمایش نمی دهد. این به این دلیل است که کلیدها ممکن است در معرض جمع آوری زباله باشند و افشای آنها از جمع آوری آنها جلوگیری می کند.

 const weakMap = new WeakMap(); const key = {}; weakMap.set(key, 'value'); console.log(weakMap.keys()); // TypeError: weakMap.keys is not a function

بدون خاصیت اندازه:

WeakMap دارای ویژگی size مانند اشیاء معمولی Map نیست. باز هم، این به این دلیل است که اندازه WeakMap ممکن است با جمع‌آوری زباله‌ها کلیدها تغییر کند.

 const weakMap = new WeakMap(); console.log(weakMap.size); // undefined

مدیریت حافظه:

WeakMap به ویژه در سناریوهایی مفید است که شما نیاز دارید داده های اضافی را با اشیاء مرتبط کنید، اما نمی خواهید از جمع آوری زباله در زمانی که دیگر به آنها نیاز نیست جلوگیری کنید. این باعث می شود آن را برای کش کردن، ذخیره سازی داده های خصوصی و سایر عملیات های حساس به حافظه مفید باشد.

نحوه ایجاد WeakMap با استفاده از new WeakMap() Constructor

ایجاد WeakMap با استفاده از سازنده new WeakMap() ساده است. در اینجا نحوه انجام این کار آمده است:

ابتدا، بیایید نحو ایجاد WeakMap را با استفاده از سازنده new WeakMap() بشکنیم:

 const weakMap = new WeakMap();

new WeakMap() : این فراخوانی سازنده است که نمونه جدیدی از WeakMap را ایجاد می کند.

const weakMap : این متغیری به نام weakMap را برای نگه داشتن مرجع به نمونه WeakMap جدید ایجاد می کند.

= : این عملگر انتساب است که نمونه WeakMap جدید ایجاد شده را به متغیر weakMap اختصاص می دهد.

حالا بیایید یک مثال WeakMap ایجاد کنیم:

 // Creating a new WeakMap const weakMap = new WeakMap(); // Creating objects to use as keys const user1 = { id: 1 }; const user2 = { id: 2 }; // Setting key-value pairs in the WeakMap weakMap.set(user1, 'John'); weakMap.set(user2, 'Alice'); // Retrieving values from the WeakMap console.log(weakMap.get(user1)); // Output: John console.log(weakMap.get(user2)); // Output: Alice // Deleting a key-value pair from the WeakMap weakMap.delete(user1); // Trying to retrieve the value after deletion console.log(weakMap.get(user1)); // Output: undefined

در این مثال:

ما یک نمونه WeakMap جدید با استفاده از سازنده new WeakMap() ایجاد می کنیم.

دو شی user1 و user2 برای خدمت به عنوان کلید در WeakMap ایجاد شده اند.

جفت‌های کلید-مقدار در WeakMap با استفاده از متد set() تنظیم می‌شوند و هر شیء کاربر را با یک نام مربوطه مرتبط می‌کند.

ما مقادیر مرتبط با user1 و user2 را با استفاده از متد get() بازیابی می کنیم.

سپس، جفت کلید-مقدار مرتبط با user1 را با استفاده از روش delete() حذف می کنیم.

در نهایت، ما سعی می کنیم مقدار مربوط به user1 را دوباره بازیابی کنیم، که از آنجایی که جفت کلید-مقدار حذف شده است undefined برمی گردد.

به یاد داشته باشید که WeakMap فقط اشیاء را به عنوان کلید می پذیرد. اگر سعی کنید از یک غیر شی به عنوان کلید استفاده کنید، منجر به TypeError می شود.

همچنین WeakMap از متدهایی مانند keys() ، values() یا entries() پشتیبانی نمی کند و همچنین دارای ویژگی هایی مانند size نیست. این به این دلیل است که کلیدهای WeakMap ممکن است در معرض جمع آوری زباله باشند و افشای آنها در این فرآیند اختلال ایجاد می کند.

موارد استفاده رایج برای WeakMap

WeakMap یک ساختار داده تخصصی در جاوا اسکریپت است که برای موارد استفاده خاص طراحی شده است که در آن شما باید داده های اضافی را با اشیاء مرتبط کنید بدون اینکه از جمع آوری زباله آن اشیا جلوگیری کنید.

در اینجا چند سناریو رایج وجود دارد که WeakMap به ویژه مفید است:

ذخیره سازی داده های خصوصی:

WeakMap می تواند برای ذخیره داده های خصوصی مرتبط با اشیاء استفاده شود. این اغلب در کتابخانه‌ها یا چارچوب‌ها برای پیوست کردن داده‌های خصوصی به اشیا بدون قرار گرفتن در معرض دنیای خارج استفاده می‌شود.

از آنجایی که کلیدهای WeakMap ضعیف نگه داشته می شوند، هنگامی که شیء زباله جمع آوری می شود، داده های خصوصی به طور خودکار حذف می شوند.

 const privateData = new WeakMap(); class MyClass { constructor() { privateData.set(this, { secret: 'my secret data' }); } getSecretData() { return privateData.get(this).secret; } } const obj = new MyClass(); console.log(obj.getSecretData()); // Output: my secret data

مکانیسم ذخیره سازی:

WeakMap می‌تواند برای ذخیره‌سازی داده‌ها استفاده شود، جایی که مقادیر ذخیره‌شده می‌توانند زباله جمع‌آوری شوند، اگر دیگر به آن‌ها نیاز نباشد.

این می تواند به ویژه در سناریوهایی مفید باشد که می خواهید داده های مرتبط با اشیاء یا محاسبات خاص را در حافظه پنهان ذخیره کنید، اما می خواهید اطمینان حاصل کنید که حافظه پنهان از جمع آوری زباله در زمانی که دیگر به آنها نیاز نیست، جلوگیری نمی کند.

 const cache = new WeakMap(); function expensiveCalculation(obj) { if (!cache.has(obj)) { const result = // perform expensive calculation cache.set(obj, result); } return cache.get(obj); } const data = { /* some data */ }; console.log(expensiveCalculation(data)); // Performs expensive calculation console.log(expensiveCalculation(data)); // Returns cached result

مدیریت عناصر DOM:

WeakMap می‌تواند برای پیگیری عناصر DOM بدون جلوگیری از جمع‌آوری زباله‌ها هنگام حذف آنها از DOM استفاده شود.

این به ویژه در سناریوهایی مفید است که می‌خواهید داده‌ها یا رفتارهای اضافی را با عناصر DOM مرتبط کنید، اما می‌خواهید اطمینان حاصل کنید که این ارتباط‌ها از پاکسازی صحیح عناصر در زمانی که دیگر مورد نیاز نیستند، جلوگیری نمی‌کنند.

 const elementData = new WeakMap(); function attachEventListener(element, callback) { element.addEventListener('click', callback); elementData.set(element, { callback }); } function detachEventListener(element) { const data = elementData.get(element); if (data) { element.removeEventListener('click', data.callback); elementData.delete(element); } } const button = document.getElementById('myButton'); attachEventListener(button, () => { console.log('Button clicked'); });

حفظ کردن:

WeakMap را می توان برای به خاطر سپردن در توابعی استفاده کرد که در آن مقادیر ذخیره شده در حافظه پنهان در صورت عدم نیاز به طور خودکار پاک می شوند.

این در سناریوهایی مفید است که می‌خواهید نتایج فراخوانی‌های تابع گران قیمت را در حافظه پنهان ذخیره کنید، اما می‌خواهید اطمینان حاصل کنید که کش به طور نامحدود رشد نمی‌کند و حافظه بیش از حد مصرف نمی‌کند.

 const memoizationCache = new WeakMap(); function memoizedFunction(obj) { if (!memoizationCache.has(obj)) { const result = // perform expensive computation memoizationCache.set(obj, result); } return memoizationCache.get(obj); } const data = { /* some data */ }; console.log(memoizedFunction(data)); // Performs expensive computation console.log(memoizedFunction(data)); // Returns cached result

روش های WeakMap

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

در اینجا روش های موجود برای WeakMap آمده است:

set(key, value) :

این روش یک جفت کلید-مقدار جدید را در WeakMap تنظیم می کند. کلید باید یک شی باشد و مقدار آن می تواند هر نوع داده ای باشد.

 const weakMap = new WeakMap(); const key = {}; weakMap.set(key, 'value');

get(key) :

این روش مقدار مربوط به کلید مشخص شده در WeakMap را بازیابی می کند. اگر کلید پیدا نشد، تعریف نشده برمی گردد.

 const weakMap = new WeakMap(); const key = {}; weakMap.set(key, 'value'); console.log(weakMap.get(key)); // Output: value

has(key) :

این روش تحلیل می کند که آیا کلید مشخص شده در WeakMap وجود دارد یا خیر. اگر کلید وجود داشته باشد true و در غیر این صورت false را برمی گرداند.

 const weakMap = new WeakMap(); const key = {}; weakMap.set(key, 'value'); console.log(weakMap.has(key)); // Output: true

delete(key) :

این روش کلید مشخص شده و مقدار مربوط به آن را از WeakMap حذف می کند. اگر کلید وجود داشته باشد و با موفقیت حذف شده باشد true را برمی‌گرداند و در غیر این صورت false را برمی‌گرداند.

 const weakMap = new WeakMap(); const key = {}; weakMap.set(key, 'value'); console.log(weakMap.delete(key)); // Output: true

به یاد داشته باشید که WeakMap متدهایی مانند keys() ، values() ، entries() یا خواصی مانند size ندارد. این به این دلیل است که کلیدهای WeakMap ممکن است در معرض جمع آوری زباله باشند و افشای آنها در این فرآیند اختلال ایجاد می کند.
همچنین WeakMap به همین دلیل اجازه تکرار روی کلیدها یا مقادیر خود را نمی دهد.

WeakSet چیست؟

WeakSet یکی دیگر از ساختارهای داده تخصصی است که در ECMAScript 6 (ES6) در کنار WeakMap معرفی شده است. این برای کار با مجموعه ای از اشیاء طراحی شده است.

برخلاف Set، WeakSet اجازه می دهد فقط اشیاء ذخیره شوند و مانند WeakMap، ارجاعات ضعیفی به این اشیاء دارد. این بدان معنی است که اگر یک شی ذخیره شده در WeakSet هیچ مرجع دیگری در جای دیگر برنامه نداشته باشد، می تواند به طور خودکار زباله جمع آوری شود. این امر WeakSet را به ویژه در سناریوهایی که نیاز به نگهداری مجموعه ای از اشیاء دارید بدون جلوگیری از پاکسازی آنها در مواقعی که دیگر مورد نیاز نیستند، مفید می کند.

ویژگی های کلیدی WeakSet

مقادیر فقط شی:

WeakSet اجازه می دهد که فقط اشیا به عنوان مقادیر ذخیره شوند. اگر بخواهید یک مقدار غیر شی مانند داده های اولیه یا نوع دیگری اضافه کنید، منجر به TypeError می شود.

مراجع ضعیف:

مشابه WeakMap، WeakSet ارجاعات ضعیفی به عناصر خود دارد. این بدان معنی است که اگر یک شی ذخیره شده در WeakSet هیچ مرجع دیگری در جای دیگر برنامه نداشته باشد، می تواند به طور خودکار زباله جمع آوری شود.

بدون شمارش:

WeakSet متدهایی مانند keys() ، values() یا entries() ارائه نمی دهد و از تکرار با forEach() پشتیبانی نمی کند. این به این دلیل است که محتویات WeakSet ممکن است با جمع‌آوری زباله‌ها تغییر کند و افشای آنها در این فرآیند اختلال ایجاد می‌کند.

بدون خاصیت اندازه:

WeakSet دارای ویژگی size مانند اشیاء Set نیست. این به این دلیل است که اندازه یک WeakSet ممکن است با جمع‌آوری اشیاء تغییر کند و افشای ویژگی size اطلاعات دقیقی را ارائه نمی‌کند.

مدیریت حافظه:

WeakSet برای سناریوهایی مفید است که در آن شما نیاز به نگهداری مجموعه ای از اشیاء دارید اما نمی خواهید از جمع آوری زباله ها در زمانی که دیگر به آنها نیازی نیست جلوگیری کنید.

این می تواند به ویژه در سناریوهایی مانند مدیریت رویداد مفید باشد، جایی که ممکن است اشیا به طور موقت به مجموعه اضافه شوند و بعداً حذف شوند.

نحوه ایجاد WeakSet با استفاده از new WeakSet() Constructor

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

 const weakSet = new WeakSet();

new WeakSet() : این فراخوانی سازنده است که نمونه جدیدی از WeakSet را ایجاد می کند.

const weakSet : این متغیری به نام weakSet برای نگه داشتن مرجع نمونه WeakSet جدید ایجاد می کند.

= : این عملگر انتساب است که نمونه WeakSet جدید ایجاد شده را به متغیر weakSet اختصاص می دهد.

حالا بیایید یک مثال WeakMap ایجاد کنیم:

 // Creating a new WeakSet const weakSet = new WeakSet(); // Creating some objects to add to the WeakSet const obj1 = { id: 1 }; const obj2 = { id: 2 }; const obj3 = { id: 3 }; // Adding objects to the WeakSet weakSet.add(obj1); weakSet.add(obj2); weakSet.add(obj3); // Checking if an object exists in the WeakSet console.log(weakSet.has(obj1)); // Output: true console.log(weakSet.has(obj2)); // Output: true console.log(weakSet.has(obj3)); // Output: true // Deleting an object from the WeakSet weakSet.delete(obj2); // Checking if the deleted object still exists console.log(weakSet.has(obj2)); // Output: false

در این مثال:

ابتدا یک نمونه WeakSet جدید با استفاده از سازنده new WeakSet() ایجاد می کنیم.

سپس، سه شی مختلف obj1 ، obj2 و obj3 ایجاد می کنیم که قصد داریم به WeakSet اضافه کنیم.

این اشیاء را با استفاده از متد add() به WeakSet اضافه می کنیم.

با استفاده از متد has() تحلیل می کنیم که آیا هر شی در WeakSet وجود دارد یا خیر.

سپس با استفاده از متد delete() obj2 از WeakSet حذف می کنیم.

در نهایت، تحلیل می‌کنیم که آیا obj2 هنوز در WeakSet وجود دارد، که از آنجایی که حذف شده است، false برمی‌گرداند.

موارد استفاده رایج برای WeakSet

WeakSet در جاوا اسکریپت به دلیل توانایی آن در نگهداری ارجاعات ضعیف به اشیا، اهداف خاصی را دنبال می کند.

در اینجا چند مورد استفاده متداول وجود دارد که WeakSet می تواند به ویژه مفید باشد:

تحلیل عضویت شی:

WeakSet برای ردیابی عضویت اشیاء در یک مجموعه بدون جلوگیری از جمع آوری زباله در زمانی که دیگر به آنها نیاز نیست، مفید است.

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

 const eventHandlers = new WeakSet(); function addEventHandler(element, handler) { eventHandlers.add(handler); element.addEventListener('click', handler); } function removeEventHandler(element, handler) { eventHandlers.delete(handler); element.removeEventListener('click', handler); }

جلوگیری از تکرار اشیا:

WeakSet را می توان برای اطمینان از اینکه اشیا در یک مجموعه کپی نمی شوند استفاده کرد. از آنجایی که WeakSet فقط می‌تواند اشیاء منحصربه‌فرد را در خود نگه دارد، تلاش برای اضافه کردن چندین بار یک شیء تأثیری نخواهد داشت.

 const uniqueObjects = new WeakSet(); function addObject(obj) { if (!uniqueObjects.has(obj)) { uniqueObjects.add(obj); console.log('Object added:', obj); } else { console.log('Object already exists:', obj); } } const obj1 = { id: 1 }; const obj2 = { id: 2 }; addObject(obj1); // Output: Object added: { id: 1 } addObject(obj1); // Output: Object already exists: { id: 1 } addObject(obj2); // Output: Object added: { id: 2 }

مدیریت منابع ضعیف در حافظه پنهان:

WeakSet می تواند برای نگهداری ارجاعات ضعیف به اشیاء ذخیره شده در حافظه پنهان استفاده شود. این اجازه می دهد تا اشیاء ذخیره شده در حافظه پنهان زمانی که دیگر مورد نیاز نیستند جمع آوری شوند و از نشت حافظه جلوگیری می کند.

 const cache = new WeakSet(); function addToCache(obj) { cache.add(obj); } function isCached(obj) { return cache.has(obj); } const cachedObj = { data: 'cached data' }; addToCache(cachedObj); console.log(isCached(cachedObj)); // Output: true // After removing all references to cachedObj cachedObj = null; console.log(isCached(cachedObj)); // Output: false (cachedObj is garbage collected)

مدیریت مراجع اشیاء در ساختارهای داده:

WeakSet را می توان برای مدیریت ارجاعات اشیا در ساختارهای داده مختلف، مانند نمودارها یا ساختارهای درخت مانند، که در آن اشیا ممکن است به صورت پویا اضافه و حذف شوند، استفاده شود.

 const references = new WeakSet(); function addReference(obj) { references.add(obj); } function removeReference(obj) { references.delete(obj); } const obj1 = { id: 1 }; const obj2 = { id: 2 }; addReference(obj1); addReference(obj2); removeReference(obj1);

روش های WeakSet

WeakSet در جاوا اسکریپت در مقایسه با سایر ساختارهای داده مانند Set مجموعه محدودی از روش ها دارد. در اینجا روش های موجود برای WeakSet آمده است:

add(value) :

این متد مقدار مشخص شده (که باید یک شی باشد) را به WeakSet اضافه می کند. اگر مقدار قبلاً در WeakSet وجود داشته باشد، روش هیچ تأثیری ندارد.

 const weakSet = new WeakSet(); const obj = { id: 1 }; weakSet.add(obj);

delete(value) :

این روش مقدار مشخص شده را در صورت وجود از WeakSet حذف می کند. اگر مقدار با موفقیت حذف شد، true را برمی‌گرداند و در غیر این صورت false را برمی‌گرداند.

 const weakSet = new WeakSet(); const obj = { id: 1 }; weakSet.add(obj); console.log(weakSet.delete(obj)); // Output: true

has(value) :

این روش تحلیل می کند که آیا مقدار مشخص شده در WeakSet وجود دارد یا خیر. اگر مقدار موجود باشد true و در غیر این صورت false برمی گرداند.

 const weakSet = new WeakSet(); const obj = { id: 1 }; weakSet.add(obj); console.log(weakSet.has(obj)); // Output: true

WeakSet متدهایی مانند values() یا forEach() برای تکرار ندارد و همچنین دارای ویژگی هایی مانند size نیست. این به این دلیل است که WeakSet برای نگهداری ارجاعات ضعیف به اشیا طراحی شده است و افشای محتوای آن در این فرآیند اختلال ایجاد می کند. همچنین WeakSet به دلایل مشابه اجازه تکرار بیش از مقادیر خود را نمی دهد.

WeakSet در مقابل WeakMap

WeakSet و WeakMap هر دو ساختارهای داده تخصصی در جاوا اسکریپت هستند که ارجاعات ضعیفی به اشیا دارند، اما اهداف کمی متفاوت دارند.

در اینجا مقایسه ای بین این دو وجود دارد:

1. هدف:

WeakSet: طراحی شده برای ذخیره مجموعه ای از اشیاء که در آن هر شی فقط یک بار در مجموعه وجود دارد. WeakSet زمانی مفید است که شما نیاز به ردیابی وجود اشیا بدون ذخیره داده های اضافی مرتبط با آنها دارید.

WeakMap: طراحی شده برای ذخیره جفت های کلید-مقدار که در آن کلیدها باید اشیاء باشند و مقادیر می توانند دلخواه باشند. WeakMap زمانی مفید است که شما نیاز دارید داده های اضافی را با اشیاء مرتبط کنید، اما می خواهید اجازه دهید آن اشیا در زمانی که دیگر مورد نیاز نیستند جمع آوری شوند.

2. مطالب:

WeakSet: فقط اشیاء را به عنوان مقادیر نگه می دارد. مقادیر موجود در WeakSet را می توان برای وجود تحلیل کرد، اما هیچ داده مرتبطی وجود ندارد.

WeakMap: جفت های کلید-مقدار را نگه می دارد، جایی که کلیدها باید اشیاء باشند و مقادیر می توانند هر نوع داده ای باشند. هر جفت کلید-مقدار نشان دهنده ارتباط بین یک شی و برخی از داده ها است.

3. تکرار:

WeakSet: از متدهایی مانند keys() ، values() یا forEach() پشتیبانی نمی کند. WeakSet اجازه تکرار مستقیم روی مقادیر خود را نمی دهد، زیرا افشای مقادیر با مکانیسم مرجع ضعیف تداخل می کند.

WeakMap: همچنین به دلایل مشابه از متدهایی مانند keys() ، values() یا forEach() پشتیبانی نمی کند. WeakMap اجازه تکرار مستقیم روی کلیدها یا مقادیر خود را نمی دهد تا از تداخل با مکانیسم مرجع ضعیف جلوگیری شود.

4. استفاده:

WeakSet: معمولاً برای مدیریت مجموعه‌ای از اشیاء، مانند ردیابی کنترل‌کننده‌های رویداد، مدیریت ارجاعات شی منحصربه‌فرد، یا جلوگیری از تکرار شی در یک مجموعه استفاده می‌شود.

WeakMap: معمولاً برای مرتبط کردن داده های اضافی با اشیاء، مانند ذخیره داده های مربوط به اشیاء خاص، ذخیره داده های خصوصی مرتبط با اشیاء، یا مدیریت مراجع اشیاء در ساختارهای داده مانند نمودارها یا درختان استفاده می شود.

نتیجه

در حالی که ساختارهای داده آشنا مانند Map و Set در جاوا اسکریپت اکسل می کنند، WeakMap و WeakSet رویکرد منحصر به فردی را ارائه می دهند. این ساختارها از مراجع ضعیف برای مدیریت خودکار حافظه مرتبط با اشیا استفاده می کنند.

این می تواند به ویژه برای اشیاء کوتاه مدت یا آنهایی که در ارجاعات دایره ای دخیل هستند مفید باشد.

در این مقاله، نحوه ایجاد و استفاده از WeakMap و WeakSet را به همراه موارد استفاده متداول آنها تحلیل کردیم که به شما امکان می‌دهد کد جاوا اسکریپت پاک‌تر و با حافظه کارآمدتر بنویسید.

در لینکدین با من ارتباط برقرار کنید.

خبرکاو

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است