Skip to content

Commit 1d54039

Browse files
committed
Add WeakMap
1 parent 4a64ff2 commit 1d54039

1 file changed

Lines changed: 167 additions & 0 deletions

File tree

content/JavaScript/weakmap.jsdoc

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
WeakMap : Object
2+
3+
WeakMaps allow associating keys and values similar to %%/Map|Map%%
4+
except WeakMap does not allow iterating over its keys or values.
5+
If WeakMap would be the only object holding on to the key/value
6+
pair, the pair will be released from memory.
7+
The keys cannot be primitive values
8+
(%%/Boolean|Boolean%%,
9+
%%/Number|Number%%,
10+
%%/String|String%%,
11+
or
12+
%%/undefined|undefined%%).
13+
14+
Version:
15+
ECMAScript 6
16+
17+
----
18+
new WeakMap() : WeakMap
19+
20+
Creates an empty WeakMap.
21+
22+
<example>
23+
var key1 = { foo: 1 };
24+
var key2 = { bar: ['a', 'b', 'c'] };
25+
26+
var x = new WeakMap([[key1, 'value 1'], [key2, 'value 2']]);
27+
28+
console.log(x.get(key1));
29+
console.log(x.get(key2));
30+
</example>
31+
32+
----
33+
new WeakMap(iterable : Object) : WeakMap
34+
35+
Creates a WeakMap by iterating over **iterable** and using
36+
the first element of the iterator value as the key and
37+
second element as the value.
38+
39+
<example>
40+
var key1 = { foo: 1 };
41+
var key2 = { bar: ['a', 'b', 'c'] };
42+
43+
var fromArray = new WeakMap([[key1, 'array0'], [key2, 'array1']]);
44+
45+
console.log(fromArray.get(key1));
46+
console.log(fromArray.get(key2));
47+
console.log();
48+
49+
var generator = function*() {
50+
yield [key1, 'generator0'];
51+
yield [key2, 'generator1'];
52+
};
53+
54+
var fromGenerator = new WeakMap(generator());
55+
console.log(fromGenerator.get(key1));
56+
console.log(fromGenerator.get(key2));
57+
</example>
58+
59+
----
60+
prototype.clear() : undefined
61+
62+
Clears the key/value pairs from **this**.
63+
64+
<example>
65+
var key1 = { foo: 1 };
66+
var key2 = { bar: ['a', 'b', 'c'] };
67+
68+
var x = new WeakMap([[key1, 'value 1'], [key2, 'value 2']]);
69+
70+
console.log(x.get(key1));
71+
console.log(x.get(key2));
72+
73+
x.clear();
74+
75+
console.log(x.get(key1));
76+
console.log(x.get(key2));
77+
</example>
78+
79+
----
80+
prototype.delete(key : Object) : Boolean
81+
82+
Removes **key** and its corresponding value from **this**.
83+
Returns **true** if **key** was in **this** before deleting it.
84+
85+
<example>
86+
var key1 = { foo: 1 };
87+
var key2 = { bar: ['a', 'b', 'c'] };
88+
89+
var x = new WeakMap([[key1, 'value 1'], [key2, 'value 2']]);
90+
91+
console.log(x.get(key1));
92+
console.log(x.get(key2));
93+
94+
x.delete(key1);
95+
96+
console.log(x.get(key1));
97+
console.log(x.get(key2));
98+
</example>
99+
100+
----
101+
prototype.get(key : Object) : Object
102+
103+
Returns the value stored for **key**. If no value is stored,
104+
returns %%/undefined|**undefined**%%.
105+
See also %%#has|**has()**%% and %%#set|**set()**%%.
106+
107+
<example>
108+
var key1 = { foo: 1 };
109+
var key2 = { bar: ['a', 'b', 'c'] };
110+
111+
var x = new WeakMap([[key1, 'value 1'], [key2, 'value 2']]);
112+
113+
console.log(x.get(key1));
114+
console.log(x.get(key2));
115+
116+
// get returns undefined for keys not in the WeakMap
117+
var key3 = { language: 'JavaScript' };
118+
console.log(x.get(key3));
119+
</example>
120+
121+
----
122+
prototype.has(key : Object) : Boolean
123+
124+
Returns **true** if the map has a value stored for **key**.
125+
126+
<example>
127+
var key1 = { foo: 1 };
128+
var key2 = { bar: ['a', 'b', 'c'] };
129+
130+
var x = new WeakMap();
131+
132+
x.set(key1, undefined);
133+
134+
// has() lets you check if a value is stored, even if
135+
// the value is undefined
136+
console.log(x.has(key1) + ' ' + x.get(key1));
137+
console.log(x.has(key2) + ' ' + x.get(key2));
138+
</example>
139+
140+
----
141+
prototype.set(key : Object, value : Object) : WeakMap
142+
143+
Stores **value** in **this** at the specified **key**.
144+
**key** cannot be a primitive value
145+
(%%/Boolean|Boolean%%,
146+
%%/Number|Number%%,
147+
%%/String|String%%,
148+
or
149+
%%/undefined|undefined%%).
150+
If a value is already stored for that **key**, it is replaced with
151+
**value**.
152+
Returns **this**.
153+
See also %%#get|**get()**%% and %%#has|**has()**%%.
154+
155+
<example>
156+
var key1 = { foo: 1 };
157+
var key2 = { bar: ['a', 'b', 'c'] };
158+
159+
var x = new WeakMap([[key1, 'value 1'], [key2, 'value 2']]);
160+
161+
console.log(x.get(key1));
162+
163+
x.set(key1, 'a different value');
164+
165+
console.log(x.get(key1));
166+
</example>
167+

0 commit comments

Comments
 (0)