WeakSet
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015ë 9ì.
* Some parts of this feature may have varying levels of support.
**WeakSet**ì ê°ì²´ì ë±ë¡ëì§ ìì ì¬ë³¼ì í¬í¨íì¬ ì°ë 기 ìì§ì´ ê°ë¥í ê°ì 모ìì
ëë¤. WeakSetì ê°ì í ë²ë§ ëíë ì ììµëë¤. ì´ ê°ì WeakSetì 컬ë ì
ìì ê³ ì í©ëë¤.
ì¤ëª
WeakSetì ê°ì íì°ì ì¼ë¡ ì°ë 기 ìì§ë ì ììµëë¤. ëë¶ë¶ì ìì ë°ì´í° ì íì ëë¶ë¶ ììë¡ ìì±ë ì ìê³ ìëª ì´ ìì¼ë¯ë¡ ì ì¥í ì ììµëë¤. ê°ì²´ì ë±ë¡ëì§ ìì ì¬ë³¼ì ì°ë 기 ìì§ì´ ê°ë¥í기 ë문ì ì ì¥ë ì ììµëë¤
Set ê°ì²´ì 주ë ì°¨ì´ë ë¤ìê³¼ ê°ìµëë¤.
-
Setê³¼ ë¬ë¦¬,WeakSetì ê°ì²´ì ì¬ë³¼ ë§ì 컬ë ì ì´ë©° 모ë ì íì ìì ê°ì í¬í¨í ì ììµëë¤. -
WeakSetì ì½í©ëë¤(weak). ì¦ ì»¬ë ì ë´ ê°ì²´ 참조ë ì½íê² ì ì§ë©ëë¤.WeakSetë´ ì ì¥ë ê°ì²´ì ë¤ë¥¸ ì°¸ì¡°ê° ìë ê²½ì°, ì°ë 기 ìì§ë ì ììµëë¤.ì°¸ê³ : ì´ë ëí 컬ë ì ë´ íì¬ ì ì¥ë ê°ì²´ 목ë¡ì´ ììì ë»í©ëë¤.
WeakSetsì ì´ê±°ë¶ê°ì ëë¤.
ì¬ì© ì: ìí 참조 íì§í기
ì¬ê·ì ì¼ë¡ ìì ì í¸ì¶íë í¨ìë ìí ë°ì´í° 구조를 ë°©ì§í기 ìí´ ì´ë¯¸ ì²ë¦¬ë ê°ì²´ë¥¼ ì¶ì í ì ìë ë°©ë²ì´ íìí©ëë¤.
WeakSetì ì´ ëª©ì ì ìí ì´ìì ì¸ ë°©ë²ì
ëë¤.
// ê°ì²´ ë´ ì ì¥ë 모ë ê²ì ëí´ ì½ë°± ì¤í
function execRecursively(fn, subject, _refs = new WeakSet()) {
// 무í ì¬ê· íí¼
if (_refs.has(subject)) {
return;
}
fn(subject);
if (typeof subject === "object" && subject) {
_refs.add(subject);
for (const key in subject) {
execRecursively(fn, subject[key], _refs);
}
_refs.delete(subject);
}
}
const foo = {
foo: "Foo",
bar: {
bar: "Bar",
},
};
foo.bar.baz = foo; // ìí 참조!
execRecursively((obj) => console.log(obj), foo);
ì¬ê¸°ìë 첫 ë²ì§¸ ì¤í ì WeakSetì´ ìì±ëê³ ì´í 모ë í¨ì í¸ì¶(ë´ë¶ _refs 매ê°ë³ì ì¬ì©)ê³¼ í¨ê» ì ë¬ë©ëë¤.
ê°ì²´ì ì ëë ìí ììë ì¤ìíì§ ìì¼ë¯ë¡, í¹í ë§¤ì° ë§ì ìì ê°ì²´ê° ê´ë ¨ë ê²½ì° ê°ì²´ 참조를 ì¶ì íë ¤ë©´ WeakSetì´ Setë³´ë¤ ë ì í©íê³ ì±ë¥ë ë°ì´ë©ëë¤.
ìì±ì
WeakSet()-
ì
WeakSetê°ì²´ë¥¼ ìì±í©ëë¤.
ì¸ì¤í´ì¤ ìì±
ìë ìì±ì WeakSet.prototypeì ì ìëì´ ìê³ , 모ë WeakSet ì¸ì¤í´ì¤ì ê³µì ë©ëë¤.
WeakSet.prototype.constructor-
ì¸ì¤í´ì¤ ê°ì²´ë¥¼ ìì±íë ìì±ì í¨ìì ëë¤.
WeakSetì¸ì¤í´ì¤ììë ì´ê¸° ê°ìWeakSetìì±ìì ëë¤. WeakSet.prototype[@@toStringTag]-
@@toStringTagìì±ì ì´ê¸° ê°ì 문ìì´"WeakSet"ì ëë¤. ì´ ìì±ìObject.prototype.toString()ìì ì¬ì©ë©ëë¤.
ì¸ì¤í´ì¤ ë©ìë
WeakSet.prototype.add()-
WeakSetê°ì²´ìvalue를 ì¶ê°í©ëë¤. WeakSet.prototype.delete()-
WeakSetììvalue를 ì ê±°í©ëë¤. ì´ ì´íìWeakSet.prototype.has(value)ëfalse를 ë°íí©ëë¤. WeakSet.prototype.has()-
WeakSetê°ì²´ìvalueê° ì¡´ì¬ ì¬ë¶ë¥¼ ë¶ì¸ ê°ì¼ë¡ ë°íí©ëë¤.
ìì
>WeakSet ê°ì²´ ì¬ì©
const ws = new WeakSet();
const foo = {};
const bar = {};
ws.add(foo);
ws.add(bar);
ws.has(foo); // true
ws.has(bar); // true
ws.delete(foo); // setìì foo를 ì ê±°
ws.has(foo); // false, foo ë ì´ë¯¸ ì ê±°
ws.has(bar); // true, bar ë ì ì§ ë¨
ëª ì¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-weakset-objects> |