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 likekeys()
,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
has
및 delete
입니다. size
및 keys()
을 지원하지 않습니다. 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
Reference
이 문제에 관하여(JavaScript WeakMap 및 WeakSet), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bello/javascript-weakmap-and-weakset-92a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)