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 ãªãã¸ã§ã¯ãã¯ã³ã¬ã¯ã·ã§ã³ãªãã¸ã§ã¯ãã§ãã Set ã¨åæ§ã«ã WeakSet å
ã®åãªãã¸ã§ã¯ãã¯ä¸åº¦ã ãåå¨ãã¾ããããªãã¡ã WeakSet ã³ã¬ã¯ã·ã§ã³å
ã§åºæã«ãªãã¾ãã
Set ãªãã¸ã§ã¯ãã¨ã®ä¸»ãªéãã¯ä¸è¨ã®éãã§ãã
-
WeakSetã¯ãªãã¸ã§ã¯ãã®ã¿ã®ã³ã¬ã¯ã·ã§ã³ã§ããSetã®ããã«ãä»»æã®åã®èªç±ãªå¤ãå ¥ãããã¨ã¯ã§ãã¾ããã -
WeakSetã¯å¼±ãåç §ã§ããã³ã¬ã¯ã·ã§ã³å ã®ãªãã¸ã§ã¯ãã¸ã®å¼±ãåç §ã§ä¿æããã¾ããWeakSetå ã«æ ¼ç´ããã¦ãããªãã¸ã§ã¯ãã¸ã®åç §ãä»ã«ãªãå ´åãã¬ãã¼ã¸ã³ã¬ã¯ã·ã§ã³ã«ããåé¤ããã¾ããã¡ã¢: ããã¯ããã®ã³ã¬ã¯ã·ã§ã³ã«æ ¼ç´ããã¦ãããªãã¸ã§ã¯ãã®ç¾å¨ã®ãªã¹ããåå¨ããªããã¨ãæå³ãã¾ãã
WeakSetsã¯åæå¯è½ã§ã¯ããã¾ããã
使ç¨ä¾: 循ç°åç §ã®æ¤åº
èªåèªèº«ãå帰çã«å¼ã³åºã颿°ã¯ãã©ã®ãªãã¸ã§ã¯ããå¦çæ¸ã¿ã§ãããã追跡ãããã¨ã§ã循ç°ãããã¼ã¿æ§é ãé²ãå¿ è¦ãããã¾ãã
WeakSet ã¯ãã®ç®çã«çæ³çã§ãã
// Execute a callback on everything stored inside an object
function execRecursively(fn, subject, _refs = null) {
if (!_refs) _refs = new WeakSet();
// Avoid infinite recursion
if (_refs.has(subject)) return;
fn(subject);
if ("object" === typeof subject) {
_refs.add(subject);
for (let key in subject) execRecursively(fn, subject[key], _refs);
}
}
const foo = {
foo: "Foo",
bar: {
bar: "Bar",
},
};
foo.bar.baz = foo; // Circular reference!
execRecursively((obj) => console.log(obj), foo);
ããã§ã WeakSet ã¯æåã®å®è¡æã«ä½æããããã®å¾ã®é¢æ°å¼ã³åºãã®ãã³ã« (å
é¨ã® _refs 弿°ã使ç¨ãã¦) 渡ããã¾ãã
ãªãã¸ã§ã¯ãã®æ°ãæ¢ç´¢é åºã¯éè¦ã§ã¯ãªãã®ã§ããªãã¸ã§ã¯ãã®åç
§ã追跡ããã«ã¯ WeakSet ã®ã»ãã Set ããããç¹ã«å·¨å¤§ãªæ°ã®ãªãã¸ã§ã¯ããå¦çããå ´åã«ã¯ãããµãããã (ããã¦æ§è½ããã) ãã®ã§ãã
ã³ã³ã¹ãã©ã¯ã¿ã¼
WeakSet()-
æ°ãã
WeakSetãªãã¸ã§ã¯ããçæãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
WeakSet.prototype.add(value)-
valueãWeakSetãªãã¸ã§ã¯ãã«è¿½å ãã¾ãã WeakSet.prototype.delete(value)-
valueãWeakSetãªãã¸ã§ã¯ãããåé¤ãã¾ããåé¤å¾ãWeakSet.prototype.has(value)ã¯falseãè¿ãã¾ãã WeakSet.prototype.has(value)-
valueãWeakSetãªãã¸ã§ã¯ãå ã®è¦ç´ ã«å«ã¾ãã¦ãããã©ããã示ãè«çå¤ãè¿ãã¾ãã
ä¾
>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); // foo ã set ããåé¤
ws.has(foo); // false, foo ã¯å餿¸ã¿
ws.has(bar); // true, bar ã¯æ®ã£ã¦ãã
foo !== bar ã§ãããã¨ã«æ³¨æãã¦ãã ããããããã¯ä¼¼ããªãã¸ã§ã¯ãã§ãããã¾ã£ããåããªãã¸ã§ã¯ãã§ã¯ããã¾ããããããã£ã¦ã両æ¹ã®ãªãã¸ã§ã¯ãã set ã«è¿½å ããã¾ãã
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-weakset-objects> |