This translation is incomplete. この記事の翻訳にご協力ください
WeakSet オブジェクトは、コレクションとして弱保持されたobjectsを格納します。概要
コレクションとして弱保持されたobjectsを格納します。
構文
new WeakSet([iterable]);
引数
- iterable
- iterable object が渡された場合、すべての要素は、新しい
WeakSetに追加されます。nullはundefinedとして扱われます。
説明
WeakSetオブジェクトはコレクションオブジェクトです。WeakSet内のオブジェクトは一度だけ発生します。すなわち、WeakSetコレクション内で唯一の要素になります。
Setオブジェクトとの主な違いは下記の通りです。:
Setとの対比で、WeakSetsはオブジェクトのみのコレクションです。すべての型の任意の値のコレクションではありません。WeakSetはweakです。: コレクション内のオブジェクトへの参照は弱保持です。WeakSet内に格納されているオブジェクトへの参照が他にない場合、ガベージコレクションされます。これは、コレクション内に格納されている現在のオブジェクトのリストがないことを意味します。WeakSetsは列挙されません。
Detecting circular references
Functions that call themselves recursively need a way of guarding against circular data structures by tracking which objects have already been processed. WeakSets are ideal for this purpose:
// 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);
Here, a WeakSet is created on the first run, and passed along with every subsequent function call (using the internal _refs parameter). The number of objects or their traversal order is immaterial, so a WeakSet is more suitable (and performant) than a Set for tracking object references, especially if a very large number of objects is involved.
コンストラクタ
WeakSet()- Creates a new
WeakSetobject.
プロパティ
WeakSet.lengthlengthプロパティの値は0です。WeakSet.prototypeSetコンストラクタに対するプロトタイプを表します。すべてのWeakSetオブジェクトにプロパティを追加できます。
WeakSet インスタンス
すべてのWeakSet インスタンスはWeakSet.prototypeから継承します。
プロパティ
WeakSet.prototype.constructor- Returns the function that created an instance's prototype. This is the
WeakSetfunction by default.
メソッド
WeakSet.prototype.add(value)- Appends a new object with the given value to the
WeakSetobject. WeakSet.prototype.delete(value)- Removes the element associated to the
value.WeakSet.prototype.has(value)will returnfalseafterwards. WeakSet.prototype.has(value)- Returns a boolean asserting whether an element is present with the given value in the
WeakSetobject or not. WeakSet.prototype.clear()Removes all elements from theWeakSetobject.
例
例: 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); // removes foo from the set
ws.has(foo); // false, foo has been removed
ws.has(bar); // true, bar is retained
Note that foo !== bar. While they are similar objects, they are not the same object. And so they are both added to the set.
仕様
| 仕様 | ステータス | コメント |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) WeakSet の定義 |
標準 | 初期定義。 |
ブラウザ実装状況
| デスクトップ | モバイル | サーバー | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
WeakSet | Chrome 完全対応 36 | Edge 完全対応 12 | Firefox 完全対応 34 | IE 未対応 なし | Opera 完全対応 23 | Safari 完全対応 9 | WebView Android 完全対応 37 | Chrome Android 完全対応 36 | Firefox Android 完全対応 34 | Opera Android 完全対応 24 | Safari iOS 完全対応 9 | Samsung Internet Android 完全対応 3.0 | nodejs 完全対応 0.12 |
WeakSet() constructor | Chrome 完全対応 36 | Edge 完全対応 12 | Firefox 完全対応 34 | IE 未対応 なし | Opera 完全対応 23 | Safari 完全対応 9 | WebView Android 完全対応 37 | Chrome Android 完全対応 36 | Firefox Android 完全対応 34 | Opera Android 完全対応 24 | Safari iOS 完全対応 9 | Samsung Internet Android 完全対応 3.0 | nodejs 完全対応 0.12 |
add | Chrome 完全対応 36 | Edge 完全対応 12 | Firefox 完全対応 34 | IE 未対応 なし | Opera 完全対応 23 | Safari 完全対応 9 | WebView Android 完全対応 37 | Chrome Android 完全対応 36 | Firefox Android 完全対応 34 | Opera Android 完全対応 24 | Safari iOS 完全対応 9 | Samsung Internet Android 完全対応 3.0 | nodejs 完全対応 0.12 |
clear | Chrome 未対応 36 — 43 | Edge 未対応 なし | Firefox 未対応 34 — 46 | IE 未対応 なし | Opera 未対応 25 — 30 | Safari 未対応 なし | WebView Android 未対応 37 — 43 | Chrome Android 未対応 36 — 43 | Firefox Android 未対応 34 — 46 | Opera Android 未対応 25 — 30 | Safari iOS 未対応 なし | Samsung Internet Android 未対応 3.0 — 4.0 | nodejs 未対応 なし |
delete | Chrome 完全対応 36 | Edge 完全対応 12 | Firefox 完全対応 34 | IE 未対応 なし | Opera 完全対応 23 | Safari 完全対応 9 | WebView Android 完全対応 37 | Chrome Android 完全対応 36 | Firefox Android 完全対応 34 | Opera Android 完全対応 24 | Safari iOS 完全対応 9 | Samsung Internet Android 完全対応 3.0 | nodejs 完全対応 0.12 |
has | Chrome 完全対応 36 | Edge 完全対応 12 | Firefox 完全対応 34 | IE 未対応 なし | Opera 完全対応 23 | Safari 完全対応 9 | WebView Android 完全対応 37 | Chrome Android 完全対応 36 | Firefox Android 完全対応 34 | Opera Android 完全対応 24 | Safari iOS 完全対応 9 | Samsung Internet Android 完全対応 3.0 | nodejs 完全対応 0.12 |
凡例
- 完全対応
- 完全対応
- 未対応
- 未対応
- 非標準。ブラウザー間の互換性が低い可能性があります。
- 非標準。ブラウザー間の互換性が低い可能性があります。
- 非推奨。新しいウェブサイトでは使用しないでください。
- 非推奨。新しいウェブサイトでは使用しないでください。