ÐÑÐ¾Ñ Ñаздел ÑодеÑÐ¶Ð¸Ñ Ð¾Ð±Ð·Ð¾Ñ ÐºÐ¾Ð»Ð»ÐµÐºÑий Set
и ÑловаÑей Map
- вÑÑÑоеннÑÑ
ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
Ñ Ð´Ð¾ÑÑÑпом по клÑÑÑ.
Тип Map
Map
- ÑеализаÑÐ¸Ñ Ð¿ÑоÑÑого аÑÑоÑиаÑивного маÑÑива (ÑловаÑÑ). Ðн ÑодеÑÐ¶Ð¸Ñ Ð´Ð°Ð½Ð½Ñе в виде набоÑа Ð¿Ð°Ñ ÐºÐ»ÑÑ/знаÑение(клÑÑи ÑникалÑнÑ) и пÑедоÑÑавлÑÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа и манипÑлиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑими даннÑми.
Также как и обÑекÑ, ÑловаÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑеÑ
СловаÑи, как ÑпеÑиализиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑÑÑкÑÑÑа даннÑÑ , имеÑÑ ÑÑÑеÑÑвеннÑе пÑеимÑÑеÑÑва по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¾Ð±ÑекÑами:
for...of
.Ð ÑледÑÑÑем пÑимеÑе пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð¾ÑновнÑе опеÑаÑии Ñо ÑловаÑÑм:
var sayings = new Map();
sayings.set("dog", "woof");
sayings.set("cat", "meow").set("elephant", "toot");
//вÑзов ÑÑнкÑии .set возвÑаÑÐ°ÐµÑ Map, поÑÑÐ¾Ð¼Ñ set можно обÑединÑÑÑ Ð² ÑепоÑки
sayings.set("dog", "гав-гав"); // замениÑÑ Ð·Ð½Ð°Ñение по клÑÑÑ
sayings.size; // 3
sayings.get("fox"); // undefined
sayings.has("bird"); // false
sayings.delete("dog");
for (var [key, value] of sayings) {
console.log(key + " goes " + value);
}
// "cat goes meow"
// "elephant goes toot"
ÐолÑÑе пÑимеÑов и полное опиÑание на ÑÑÑаниÑе ÑпÑавоÑника Map
.
Тип WeakMap
WeakMap
ÑÑо ÑпеÑиалÑнÑй вид ÑловаÑÑ, клÑÑами коÑоÑого могÑÑ Ð±ÑÑÑ ÑолÑко обÑекÑÑ, пÑиÑÑм ÑÑÑлки на ниÑ
в WeakMap ÑвлÑÑÑÑÑ ÑлабÑми (не ÑÑиÑÑваÑÑÑÑ ÑбоÑÑиком мÑÑоÑа (garbage collector GC)).
ÐÑимеÑание: ÐнÑеÑÑÐµÐ¹Ñ WeakMap
ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Map
, единÑÑвенное оÑлиÑие - клÑÑи WeakMap
нелÑÐ·Ñ Ð¸ÑеÑиÑоваÑÑ (Ñ.e. нелÑÐ·Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑпиÑок клÑÑей). ÐÑо понÑÑно, поÑколÑÐºÑ Ð² Ñаком ÑлÑÑае возникла Ð±Ñ Ð½ÐµÐ¾Ð¿ÑеделÑнноÑÑÑ Ñ Ð´Ð¾ÑÑовеÑноÑÑÑÑ ÑÑого ÑпиÑка в завиÑимоÑÑи Ð¾Ñ ÑоÑÑоÑÐ½Ð¸Ñ garbage collection.
ÐолÑÑе пÑимеÑов, полное опиÑание, а Ñакже обÑÑждение "ÐаÑем WeakMap?" на ÑÑÑаниÑе ÑпÑавоÑника WeakMap
.
ÐÑмеÑим, ÑÑо WeakMap,
в ÑаÑÑноÑÑи, Ð¼Ð¾Ð¶ÐµÑ ÑлеганÑно иÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ñпаковки пÑиваÑнÑÑ
даннÑÑ
или деÑалей ÑеализаÑии. СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð²Ð·ÑÑ Ð¸Ð· ÑÑаÑÑи Ðика ФиÑÑджеÑалÑда «Hiding Implementation Details with ECMAScript 6 WeakMaps» (англ.). ÐÑиваÑÐ½Ð°Ñ ÑаÑÑÑ ÑоÑ
ÑанÑеÑÑÑ ÐºÐ°Ðº знаÑение в privates
и Ð¸Ð¼ÐµÐµÑ Ð²ÑÐµÐ¼Ñ Ð¶Ð¸Ð·Ð½Ð¸ Ñакое же как и ÑÑÑноÑÑÑ ÐºÐ»Ð°ÑÑа. Сам клаÑÑ Ð¸ его меÑÐ¾Ð´Ñ Ð¿ÑблиÑнÑ; пÑоÑее недоÑÑÑпно извне модÑлÑ:
const privates = new WeakMap();
export class Public() {
constructor() {
const me = {
// ÐÑиваÑнÑе даннÑе идÑÑ Ð·Ð´ÐµÑÑ
};
// 'me' бÑÐ´ÐµÑ Ð¾ÑвобождÑн вмеÑÑе Ñ 'this' !!!
privates.set(this, me);
}
method () {
const me = privates.get(this);
// СделайÑе ÑÑо-нибÑÐ´Ñ Ñ Ð¿ÑиваÑнÑми даннÑми в 'me'...
}
}
ÐоллекÑии Тип Set
Set
ÑеализаÑÐ¸Ñ ÐºÐ¾Ð»Ð»ÐµÐºÑии - ÑÑÑÑкÑÑÑа даннÑÑ
, коÑоÑÐ°Ñ ÑодеÑÐ¶Ð¸Ñ ÑпиÑок ÑникалÑнÑÑ
ÑлеменÑов в поÑÑдке иÑ
добавлениÑ.
Ð ÑледÑÑÑем пÑимеÑе пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð¾ÑновнÑе опеÑаÑии по ÑабоÑе Ñ ÐºÐ¾Ð»Ð»ÐµÐºÑией Set:
var mySet = new Set();
mySet.add(1);
mySet.add("some text");
mySet.add("foo");
mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2
for (let item of mySet) console.log(item);
// 1
// "some text"
ÐолÑÑе пÑимеÑов и полное опиÑание на ÑÑÑаниÑе ÑпÑавоÑника Set
Ðожно ÑоздаÑÑ Array
из Set Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Array.from
или иÑполÑзÑÑ spread operator.
Ð ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, конÑÑÑÑкÑÐ¾Ñ Set
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Array
в каÑеÑÑве аÑгÑменÑа.
ÐÑимеÑание: ÐоÑколÑÐºÑ Set
ÑÑÑÑкÑÑÑа ÑабоÑÐ°ÐµÑ Ñ ÑникалÑнÑми знаÑениÑми, лÑбÑе повÑоÑÑÑÑиеÑÑ ÑлеменÑÑ Ð¸Ð· Array бÑдÑÑ Ð¿ÑоигноÑиÑованÑ.
Array.from(mySet);
[...mySet2];
mySet2 = new Set([1, 2, 3, 4]);
СÑавнение Array
и Set
СловаÑи, как ÑпеÑиализиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑÑÑкÑÑÑа даннÑÑ , имеÑÑ ÑÑÑеÑÑвеннÑе оÑлиÑÐ¸Ñ Ð¿Ð¾ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¼Ð°ÑÑивами:
Set.has
ÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑее Ñем Array.indexOf
.NaN
обÑабаÑÑваеÑÑÑ ÐºÐ¾ÑÑекÑно.Тип WeakSet
WeakSet
ÑÑо ÑпеÑиалÑнÑй вид коллекÑии, ÑлеменÑами коÑоÑой могÑÑ Ð±ÑÑÑ ÑолÑко обÑекÑÑ. СÑÑлки на ÑÑи обÑекÑÑ Ð² WeakSet ÑвлÑÑÑÑÑ ÑлабÑми (не ÑÑиÑÑваÑÑÑÑ ÑбоÑÑиком мÑÑоÑа (garbage collector GC)).
ÐÑимеÑание: ÐлеменÑÑ WeakSet
ÑникалÑÐ½Ñ Ð¸ могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ ÑолÑко один Ñаз, Ñакже как и в Set
.
ÐÑновнÑе оÑлиÑÐ¸Ñ Ð¾Ñ Set
:
WeakSet
ÑÑо коллекÑÐ¸Ñ Ð¾Ð±ÑекÑов ( пÑимиÑивнÑе знаÑÐµÐ½Ð¸Ñ Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ).WeakSet
нелÑÐ·Ñ Ð¸ÑеÑиÑоваÑÑ. Ð Ñакже нелÑÐ·Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑпиÑок (иÑеÑаÑоÑ) ÑлеменÑов.ÐÑполÑзование WeakSet
доÑÑаÑоÑно ÑпеÑиÑиÑеÑкое. ÐолÑзÑÑÑÑ Ñем, ÑÑо они не могÑÑ ÑоздаваÑÑ ÑÑеÑек памÑÑи, в ниÑ
можно, напÑимеÑ, безопаÑно помеÑаÑÑ ÑÑÑлки на DOM-ÑлеменÑÑ.
ÐолÑÑе пÑимеÑов и полное опиÑание на ÑÑÑаниÑе ÑпÑавоÑника WeakSet
Map
и Set
СÑавнение на ÑавенÑÑво клÑÑей в Map
objects или обÑекÑов в Set
оÑновано на "same-value-zero algorithm":
===
.-0
и +0
ÑÑиÑаÑÑÑÑ ÑавнÑми.NaN
ÑÑиÑаеÑÑÑ ÑавнÑм ÑÐ°Ð¼Ð¾Ð¼Ñ Ñебе (в оÑлиÑие Ð¾Ñ ===
).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