JavaScript의 WeakSet은 내부 개체에 "약한" 참조가 있는 특별한 종류의 집합입니다. 이는 WeakSet에 저장된 객체에 대한 다른 참조가 없으면 해당 객체가 가비지 수집될 수 있음을 의미합니다. 일반 Set과 달리 WeakSet은 객체만 요소로 받아들이고 해당 객체는 약하게 유지됩니다. 따라서 개체를 추적하고 싶지만 다른 곳에서 더 이상 필요하지 않은 경우 가비지 수집을 방지하고 싶지 않은 경우 WeakSet이 유용합니다.
1 객체만: WeakSet에는 숫자나 문자열과 같은 기본 값이 아닌 객체만 포함될 수 있습니다.
2 약한 참조: WeakSet의 개체에 대한 참조는 약합니다. 즉, 개체에 대한 다른 참조가 없으면 가비지 수집될 수 있습니다.
3 크기 없음 속성: WeakSet은 요소 수를 노출하지 않기 때문에 크기를 가져올 수 없습니다.
4. 반복 없음: WeakSet에는 forEach와 같은 메서드나 Set과 같은 반복자가 없기 때문에 반복할 수 없습니다.
let weakset = new WeakSet(); let obj1 = {name: "object1"}; let obj2 = {name: "object2"}; weakset.add(obj1); weakset.add(obj2); console.log(weakset.has(obj1)); // true console.log(weakset.has(obj2)); // true obj1 = null; // obj1 is eligible for garbage collection console.log(weakset.has(obj1)); // false
WeakSet이 스파이를 위한 비밀 클럽과 같은 시나리오를 상상해 봅시다. 이 클럽은 매우 비밀스럽기 때문에 스파이가 더 이상 활동하지 않으면 흔적도 없이 사라진다. 클럽은 결코 회원 수를 기록하지 않으며, 현재 클럽 회원이 누구인지 목록을 얻을 수 없습니다. 클럽에 특정 스파이가 있는지만 물어볼 수 있습니다.
// The Secret Spy Club class Spy { constructor(name) { this.name = name; } introduce() { console.log(`Hi, I am Agent ${this.name}`); } } let spy1 = new Spy("007"); let spy2 = new Spy("008"); let spyClub = new WeakSet(); // Adding spies to the secret club spyClub.add(spy1); spyClub.add(spy2); console.log(spyClub.has(spy1)); // true console.log(spyClub.has(spy2)); // true spy1.introduce(); // Hi, I am Agent 007 spy2.introduce(); // Hi, I am Agent 008 // Spy 007 finishes his mission and disappears spy1 = null; // Now Agent 007 is no longer in the club and is eligible for garbage collection // Let's see if spies are still in the club console.log(spyClub.has(spy1)); // false, because Agent 007 is no longer referenced console.log(spyClub.has(spy2)); // true, because Agent 008 is still active // Agent 008 finishes his mission too spy2 = null; // Now Agent 008 is also eligible for garbage collection // Checking club members again console.log(spyClub.has(spy2)); // false, no active spies left
이 재미있는 예에서 WeakSet은 비밀 스파이 클럽이고 스파이는 객체입니다. 스파이(객체)가 임무를 완료하고 이에 대한 다른 참조가 없으면 코드의 다른 곳에서 더 이상 참조되지 않을 때 객체가 WeakSet에서 제거되는 방식과 마찬가지로 흔적도 없이 사라집니다(가비지 수집됨).
위 내용은 JS의 WeakSet?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!