FREELessons: 65Length: 7.1 hours

• Overview
• Transcript

# 3.5 Weak Maps and Weak Sets

Following on the previous lesson, let’s take a look at WeakSets and WeakMaps. A WeakSet contains weakly referenced unique objects, whereas a WeakMap has weakly referenced objects as keys.

Syntax

• new WeakMap()/WeakSet()
• add
• remove

## 11.Conclusion1 lesson, 00: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.

Back to the top