Baseline Widely available *
WeakSet
â ÑÑо Ð½Ð°Ð±Ð¾Ñ Ð·Ð½Ð°Ñений, поддеÑживаÑÑиÑ
ÑбоÑÐºÑ Ð¼ÑÑоÑа, вклÑÑÐ°Ñ Ð¾Ð±ÑекÑÑ Ð¸ незаÑегиÑÑÑиÑованнÑе ÑимволÑ. Ðаждое знаÑение в WeakSet
Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑÑеÑаÑÑÑÑ ÑолÑко один Ñаз, оно ÑникалÑно в коллекÑии WeakSet
.
ÐнаÑÐµÐ½Ð¸Ñ Ð² WeakSet Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑбоÑÐºÑ Ð¼ÑÑоÑа. ÐолÑÑинÑÑво пÑимиÑивнÑÑ Ñипов даннÑÑ Ð¼Ð¾Ð³ÑÑ Ð½Ðµ имеÑÑ Ð²Ñемени жизни, поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ не могÑÑ Ð±ÑÑÑ ÑÐ¾Ñ ÑаненÑ. ÐбÑекÑÑ Ð¸ незаÑегиÑÑÑиÑованнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ñ Ð¿Ð¾ÑÐ¾Ð¼Ñ ÑÑо они поддеÑживаÑÑ ÑбоÑÐºÑ Ð¼ÑÑоÑа.
ÐлÑÑевÑе оÑлиÑÐ¸Ñ Ð¾Ñ Set
:
WeakSet
â ÑÑо Ð½Ð°Ð±Ð¾Ñ ÑолÑко обÑекÑов и Ñимволов. РоÑлиÑие Ð¾Ñ Set
он не Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¿ÑоизволÑнÑе знаÑÐµÐ½Ð¸Ñ Ð»Ñбого Ñипа.
WeakSet
ÑвлÑеÑÑÑ ÑлабÑм в Ñом ÑмÑÑле, ÑÑо ÑÑÑлки на обÑекÑÑ Ð² WeakSet
Ñ
ÑанÑÑÑÑ Ñлабо. ÐÑли Ð½ÐµÑ Ð´ÑÑгиÑ
ÑÑÑлок на знаÑение, Ñ
ÑанÑÑееÑÑ Ð² WeakSet
, ÑÑи знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑÐ´Ð°Ð»ÐµÐ½Ñ ÑбоÑÑиком мÑÑоÑа.
ÐÑимеÑание: ÐÑо Ñакже ознаÑаеÑ, ÑÑо Ð½ÐµÑ ÑпиÑка ÑекÑÑиÑ
знаÑений ÑоÑ
ÑанÑннÑÑ
в набоÑе. ÐбÑекÑÑ WeakSet
не пеÑеÑиÑлимÑ.
ФÑнкÑиÑм, коÑоÑÑе вÑзÑваÑÑ ÑÐµÐ±Ñ ÑекÑÑÑивно, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ ÑпоÑоб заÑиÑÑ Ð¾Ñ ÑиклиÑеÑÐºÐ¸Ñ ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¿ÑÑÑм оÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ñого, какие обÑекÑÑ Ñже бÑли обÑабоÑанÑ.
ÐбÑекÑÑ WeakSet
идеалÑно подÑ
одÑÑ Ð´Ð»Ñ ÑÑого:
// ÐÑполнÑем `fn` Ð´Ð»Ñ Ð²Ñего, ÑÑо Ñ
ÑаниÑÑÑ Ð²Ð½ÑÑÑи обÑекÑа.
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()
ÐобавлÑÐµÑ value
в обÑÐµÐºÑ WeakSet
.
WeakSet.prototype.delete()
УдалÑÐµÑ value
из WeakSet
. ÐоÑле ÑÑого WeakSet.prototype.has(value)
бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ false
.
WeakSet.prototype.has()
ÐозвÑаÑÐ°ÐµÑ Ð±Ñлево знаÑение, показÑваÑÑее пÑиÑÑÑÑÑвÑÐµÑ Ð»Ð¸ 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 из набоÑа
ws.has(foo); // false, foo бÑл ÑдалÑн
ws.has(bar); // true, bar ÑоÑ
ÑанилÑÑ
ÐбÑаÑиÑе внимание, ÑÑо foo !== bar
. ХоÑÑ ÑÑо поÑ
ожие обÑекÑÑ, ÑÑо не один и ÑÐ¾Ñ Ð¶Ðµ обÑекÑ. РпоÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ оба добавлÑÑÑÑÑ Ð² набоÑ.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4