WeakSet (WeakSet)
WeakSet یک «مجموعه (Set)» ویژه است. اما فقط «شیء (Object)» می پذیرد. همچنین «ارجاع ضعیف (Weak Reference)» دارد؛ یعنی اگر شیء جایی دیگر استفاده نشود، خودکار پاک می شود.
ساخت WeakSet و بررسی عضو
اول یک WeakSet بساز. بعد یک شیء اضافه کن. سپس با has بررسی کن.
let mySet = new WeakSet();
let myObj = { fname: "John", lname: "Doe" };
mySet.add(myObj);
let answer = mySet.has(myObj);
افزودن، حذف و دوباره بررسی
می توانی شیء را حذف کنی. سپس دوباره با has چک کن.
let mySet = new WeakSet();
let myObj = { fname: "John", lname: "Doe" };
mySet.add(myObj);
mySet.delete(myObj);
let answer = mySet.has(myObj);
زباله روب (Garbage Collection) و ارجاع ضعیف
وقتی هیچ ارجاعی به شیء نماند، موتور جاوااسکریپت حافظه را آزاد می کند. WeakSet جلوی این کار را نمی گیرد.
let mySet = new WeakSet();
let myObj = { fname: "John", lname: "Doe" };
mySet.add(myObj);
myObj = null;
// پس از پاک شدن شیء از حافظه، ورودی WeakSet هم می رود.
نمونه: ردیابی بازدیدکنندگان
WeakSet برای «ردیابی» مناسب است؛ چون فقط وجود یا عدم وجود مهم است.
let text = "";
const persons = new WeakSet();
const John = { name: "John", age: 40 };
const Paul = { name: "Paul", age: 41 };
const Ringo = { name: "Ringo", age: 42 };
const George = { name: "George", age: 43 };
track(Paul);
track(Ringo);
track(Paul);
function track(visitor) {
if (persons.has(visitor)) {
text += visitor.name + " is visiting again.";
} else {
persons.add(visitor);
text += visitor.name + ", age" + visitor.age + ", is visiting for the first time";
}
}
پاک سازی خودکار با حذف ارجاع ها
اگر همه ارجاع های یک شیء را حذف کنی، عضویتش در WeakSet هم خودکار می پرد.
// ادامه مثال بالا
// حذف ارجاع:
// John = null; // اگر متغیر let/const باشد، به جای جایگزینی نامعتبر، ارجاع را کنار بگذار.
قوانین مهم WeakSet
- فقط شیء؛ مقدارهای اولیه مجاز نیستند.
- اندازه ندارد؛ ویژگی size وجود ندارد.
- قابل پیمایش نیست؛ حلقه و values ندارد.
- متدهای کم: new WeakSet، add، delete، has.
نکته: برای «شمارش» یا «اطلاعات اضافی»، بهتر است از WeakMap استفاده کنی.
جمع بندی سریع
- WeakSet فقط شیء می گیرد.
- عضوها ارجاع ضعیف دارند.
- اندازه و پیمایش ندارد.
- برای ردیابی وجود شیء عالی است.
برای مفاهیم مرتبط، صفحه مجموعه ها و متدهای مجموعه را ببین. سپس برای روابط مجموعه به منطق مجموعه برو.