JavaScript WeakMap 및 WeakSet

위크맵



이전 글에서는 프리미티브 값을 키로 사용했습니다. 객체가 키이기 때문에 weakMap에서는 다릅니다.

아래 예를 참조하십시오.

const weakMap = new WeakMap();

const obj = {};
const str = '';

weakMap.set(obj, "ok"); // WeakMap { <items unknown> }
weakMap.set(str, "ok");  // only use non-primitive data as key
// TypeError: Invalid value used as weak map key


개체에 대한 참조가 없으면 자동으로 메모리에서 제거됩니다.

아래 예를 참조하십시오.

let bello = { name: "Bello" };

const weakMap = new WeakMap();
weakMap.set(bello, 'noah');

bello = null; // changed/overriden reference

// bello is removed from memory!


WeakMap does not support iteration methods like keys(), values(), entries().



다음 방법은 여전히 ​​WeakMap 에서 작동합니다.
  • weakMap.get(key)
  • weakMap.set(key, value)
  • weakMap.delete(key)
  • weakMap.has(key)
  • WeakMap에서 지원되지 않는 iterable 메서드의 이면에 있는 이유는 JavaScript 엔진 메모리 정리(전체 또는 부분 정리)가 추가 삭제가 발생할 때 즉시 또는 나중에 수행될 수 있기 때문입니다.


    위크셋



    기본적으로 사이트를 방문한 사람들을 추적하는 것과 같이 개체의 예/아니오 또는 참/거짓 사실의 추가 저장소로 사용됩니다.

    Mostly only objects are added to WeakSet.


  • 지원되는 메서드는 add hasdelete 입니다.
  • sizekeys() 을 지원하지 않습니다.
  • weakMap과 마찬가지로 반복 방법은 지원되지 않으며 모든 현재 콘텐츠를 가져오는 기능도 부족합니다.

  • 아래 예를 참조하십시오.

    const visitedSet = new WeakSet();
    
    let bello = { name: "Bello" };
    const monica = { name: "Monica" };
    const jennifer = { name: "Jennifer" };
    
    visitedSet.add(bello); // Bello visited site
    visitedSet.add(monica); // Monica visited site
    visitedSet.add(bello); // Bello again visited site
    
    // visitedSet has 2 users now
    
    // check if Bello visited the site?
    console.log( visitedSet.has(bello) ); // true
    
    // check if Jennifer visited the site
    console.log( visitedSet.has(jennifer) ); // false
    
    bello = null; // visitedSet will be cleaned automatically
    



    좋은 웹페이지 즐겨찾기