- Overview
- Transcript
3.5 Weak Maps and Weak Sets
Following on the previous lesson, let’s take a look at WeakSet
s and WeakMap
s. A WeakSet
contains weakly referenced unique objects, whereas a WeakMap
has weakly referenced objects as keys.
Syntax
-
new WeakMap()
/WeakSet()
add
remove
1.Introduction2 lessons, 07:42
1.1Introduction02:12
1.2Setup05:30
2.Language Fundamentals8 lessons, 1:00:53
2.1Variables06:33
2.2Data Types11:28
2.3Arithmetic, Assignment, and Comparison Operators10:24
2.4Unary, Logical, Comma, and Spread Operators09:02
2.5Operator Precedence03:50
2.6Reserved Words04:17
2.7Strict Mode04:34
2.8Functions10:45
3.Data Structures5 lessons, 22:52
3.1Arrays04:29
3.2Objects04:30
3.3Sets04:57
3.4Maps04:21
3.5Weak Maps and Weak Sets04:35
4.Controlling Program Execution7 lessons, 37:06
4.1Conditionals07:49
4.2Switch Statements04:41
4.3The For Loop06:39
4.4The `for .. in` Loop05:17
4.5The `for .. of` Loop04:02
4.6Iterators05:03
4.7While Loops03:35
5.Using JavaScript13 lessons, 1:44:36
5.1Working With Strings09:32
5.2Template Literals05:46
5.3Working With Numbers06:57
5.4Working With Arrays12:53
5.5Iterating and Transforming Arrays07:33
5.6Working With the Object Type13:55
5.7Object Literal Extensions06:45
5.8Working With Object Instances06:45
5.9Getters and Setters05:00
5.10Custom Objects11:28
5.11The `Math` API04:54
5.12Working With Dates and Times08:10
5.13The `Array` Constructor04:58
6.Functions8 lessons, 56:07
6.1The `this` Object06:15
6.2Working With Functions10:11
6.3Scope07:37
6.4Arrow Functions06:59
6.5Generator Functions08:13
6.6Closures05:00
6.7Prototypes06:26
6.8Default and Rest Parameters05:26
7.Miscellaneous6 lessons, 52:39
7.1Destructuring Assignments08:09
7.2AJAX08:30
7.3Regular Expressions10:51
7.4More About Regular Expressions08:38
7.5Classes06:48
7.6ES Modules09:43
8.Working With the DOM6 lessons, 37:39
8.1Selecting HTML Elements05:02
8.2Manipulating HTML Elements07:40
8.3DOM Traversal05:25
8.4Adding and Removing Elements04:45
8.5Creating Elements and Other Nodes04:39
8.6DOM Events10:08
9.Web APIs4 lessons, 17:41
9.1The Selector API03:03
9.2Geolocation05:29
9.3Web Storage05:24
9.4Web Workers03:45
10.Asynchronous JavaScript5 lessons, 26:23
10.1Promises09:52
10.2Promise Chaining05:11
10.3The async Keyword03:21
10.4The await Keyword04:04
10.5More About async and await03:55
11.Conclusion1 lesson, 00:43
11.1Conclusion00:43
3.5 Weak Maps and Weak Sets
Hi folks. In this lesson, we're going to look at some objects that are extremely similar to Sets and Maps that we've already looked at, WeakSets and WeakMaps. The difference between these objects and the regular Sets and Maps that we already looked at, is that references to the values inside WeakMaps and WeakSets are held weakly. What this means is that the JavaScript engine will be able to remove the values when they are no longer referenced, and this can improve performance. Let's take a quick look at WeakSets first. We saw that Sets can be composed of any type of data. This is one place where WeakSets differ from Sets. WeakSets can only be composed of objects. To create a WeakSet, we use the WeakSet constructor. So this is very similar to the Set constructor, it's just called WeakSet. And like with the Set constructor, we can also pass an iterable object to the constructor, and the elements of the iterable object will be added to the Set. Each value inside a WeakSet must still be unique. WeakSets have a much smaller API than sets. We have only the add, delete, and has methods. So we've declared an object, called someObj, because WeakSets can only contain objects, and then we add this to the WeakSet using the add method. And, let's just add a log statement that checks whether or not the WeakSet has the object inside it. Obviously, we know that we do in this case, but that might not always be the case. And I'm missing a parentheses there, so let's just close off the log statement. And let's take a look in a browser, and we can see that it returns true, because the WeakSet does contain someObj. So now, let's look at the delete method. And let's take a look in the browser once again. And this time the second log statement returns false, because we deleted someObj using the delete method. So these are the only methods that we have available with a WeakSet. Let's move on to look at WeakMaps. One difference between a WeakMap and a regular Map is that, in a regular Map, the keys inside it can be of any data type. That's not the case with a WeakMap. Similar to a WeakSet, the keys in a WeakMap must be objects. Just like with Maps, we create a WeakMap using its constructor. Again, with a WeakMap, as compared to a Map, we have a much smaller API for working with it. With a WeakMap, we have only the methods delete, get, has, and set. This also means that WeakMaps, just like WeakSetss, can't be iterated. What separates WeakMaps from Maps is that references to the keys in a WeakMap are held weakly, which means that both the key and its associated value can be garbage collected, if no other references to the key exist. The main reasons for using WeakMaps and WeakSets is to avoid memory leaks, but I think this is probably a slightly too advanced topic for this point in the course. So for now let's just acknowledge that WeakMaps and WeakSets exist, and you can come back to them later when your understanding of JavaScript is a bit more advanced. So, in this lesson we looked at WeakSets and WeakMaps, which is similar to their Sets and Map counterparts, except that the references to the values inside them are held weakly, and so do not prevent garbage collection. We saw that they both have a very a small, focused API, compared to their non-weak counterparts, and that neither of these data structures can be iterated. We've now covered the main data structures used in JavaScript. In the next section, we'll focus on controlling program execution, starting with conditional logic. Thanks for watching.