WeakMap
khóa phải là đối tượng, không phải giá trị nguyên thủy.
let weakMap = new WeakMap();
let obj = {};
weakMap.set(obj, "ok"); // works fine (object key)
// can't use a string as the key
weakMap.set("test", "Not ok"); // Error, because "test" is not an object
Tại sao????
Hãy xem ví dụ dưới đây.
let user = { name: "User" };
let map = new Map();
map.set(user, "...");
user = null; // overwrite the reference
// 'user' is stored inside the map,
// We can get it by using map.keys()
Nếu chúng ta sử dụng một đối tượng làm khóa trong Map
, thì trong khi
Map
tồn tại, đối tượng đó cũng tồn tại. Nó chiếm bộ nhớ và có thể không được thu thập rác.
WeakMap
là khác nhau cơ bản ở khía cạnh này. Nó không ngăn chặn việc thu gom rác của các đối tượng chính.
let user = { name: "User" };
let weakMap = new WeakMap();
weakMap.set(user, "...");
user = null; // overwrite the reference
// 'user' is removed from memory!
nếu chúng ta sử dụng một đối tượng làm khóa trong đó và không có tham chiếu nào khác đến đối tượng đó - nó sẽ tự động bị xóa khỏi bộ nhớ (và khỏi bản đồ).
WeakMap
không hỗ trợ lặp lại và các phương thức khóa () , giá trị () , mục () , vì vậy không có cách nào để lấy tất cả các khóa hoặc giá trị từ nó.
WeakMap chỉ có các phương thức sau:
- yếuMap.get (phím)
- yếuMap.set (khóa, giá trị)
- yếuMap.delete (phím)
- yếuMap.has (phím)
Điều đó hiển nhiên như thể một đối tượng đã mất tất cả các tham chiếu khác (như 'người dùng' trong đoạn mã trên), thì nó sẽ được tự động thu thập. Nhưng về mặt kỹ thuật, nó không được chỉ định chính xác khi nào việc dọn dẹp diễn ra.
Công cụ JavaScript quyết định điều đó. Nó có thể chọn thực hiện dọn dẹp bộ nhớ ngay lập tức hoặc đợi và thực hiện dọn dẹp sau khi có nhiều lần xóa hơn. Vì vậy, về mặt kỹ thuật, số phần tử hiện tại của a WeakMap
chưa được biết. Động cơ có thể đã làm sạch nó hoặc không hoặc đã làm nó một phần. Vì lý do đó, các phương pháp truy cập tất cả các khóa / giá trị không được hỗ trợ.
Lưu ý: - Khu vực ứng dụng chính của WeakMap là nơi lưu trữ dữ liệu bổ sung. Giống như bộ nhớ đệm một đối tượng cho đến khi đối tượng đó được thu gom rác.