JS의 WeakSet?

WBOY
WBOY원래의
2024-07-19 19:27:52326검색

WeakSet in JS?

JavaScript의 WeakSet은 내부 개체에 "약한" 참조가 있는 특별한 종류의 집합입니다. 이는 WeakSet에 저장된 객체에 대한 다른 참조가 없으면 해당 객체가 가비지 수집될 수 있음을 의미합니다. 일반 Set과 달리 WeakSet은 객체만 요소로 받아들이고 해당 객체는 약하게 유지됩니다. 따라서 개체를 추적하고 싶지만 다른 곳에서 더 이상 필요하지 않은 경우 가비지 수집을 방지하고 싶지 않은 경우 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:JavaScript의 프록시다음 기사:JavaScript의 프록시