Computer >> Máy Tính >  >> Lập trình >> Javascript

Sự khác biệt giữa Map và WeakMap trong JavaScript là gì?

Sự khác biệt giữa Bản đồ và Bản đồ yếu

Cơ chế chức năng của Map và WeakMap giống nhau nhưng chúng có chút khác biệt.

1) A Bản đồ yếu chỉ chấp nhận các đối tượng làm khóa trong khi Bản đồ , ngoài các đối tượng, chấp nhận kiểu dữ liệu nguyên thủy như chuỗi, số, v.v.

2) Bản đồ yếu các đối tượng không ngăn chặn việc thu gom rác nếu không có tham chiếu đến đối tượng đang hoạt động như một khóa. Do đó, không có phương pháp nào để truy xuất khóa trong WeakMap , trong khi trong Bản đồ có các phương thức như Map.prototype.keys () để lấy khóa.

3) Không có thuộc tính kích thước nào tồn tại trong WeakMap .

Bản đồ

Nó được sử dụng để liên kết khóa với một giá trị bất kể kiểu dữ liệu như chuỗi, số, đối tượng, v.v.

Ví dụ

<html>
<body>
<script>

// Creates a new Map object
   var map = new Map();    

// Defines an object that will be used a key in the ma                
   var objKey = {name: 'tutorialspoint'};    
   document.write("</br>");

// Adds a new element having a String as its key and a String as its value
   map.set('first', 'a');                    
   document.write("</br>");

// Adds a new element having a Number as its key and an Array as its value
   map.set(3, ['c']);      
   document.write("</br>");

// Adds a new element having an Object as its key and a Number as its value
   map.set(objKey, 3);

// Adds a new element having an Array as its key and a String as its value
   map.set(['add', 'mapping'], 'd');          

// Checks whether an element having a key of "2" exists in the map.
   document.write(map.has(2));
   document.write("</br>");

// Checks whether an element having a key of "first" exists in the map.
   document.write(map.has('first'));
   document.write("</br>");

// Retrieves the element having key of "first". Prints "a"
   document.write(map.get('first'));
   document.write("</br>");

// Retrieves the element having as a key the value of objKey.
   document.write(map.get(objKey));
   document.write("</br>");

// Retrieves the element having key of "empty". Prints "undefined"
   document.write(map.get('empty'));
   document.write("</br>");

// Retrieves the map size. Prints "4"
   document.write(map.size);
   document.write("</br>");

// deletes all the value  
   map.clear();
   document.write(map.size);
</script>
</body>
</html>

Đầu ra

false
true
a
3
undefined
4
0

Bản đồ yếu

Trong ví dụ dưới đây, chúng ta có thể thấy rằng WeakMap chỉ chấp nhận các đối tượng chứ không chấp nhận bất kỳ giá trị nguyên thủy nào (chuỗi, số)

Ví dụ

<html>
<body>
<script>

// Creates a new WeakMap object
   var weakMap = new WeakMap();

// Defines an object that will be used a key in the map
   var obj4 = {d: 4};

// Defines another object that will be used a key in the map
   var obj5 = {e: 5};

// Adds a new element having an Object as its key and a String as its value
   weakMap.set(obj4, 'fourth');

// Adds a new element having an Object as its key and a String as its value
   weakMap.set(obj5, 'fifth');

// Adds a new element having a Function as its key and a Number as its value
   weakMap.set(function(){}, 7);

// Checks whether an element having as its key the value of objKey4 exists in the weak map.
   document.write(weakMap.has(obj4));
   document.write("</br>");

// Retrieve the value of element associated with the key having the value of objKey4. Prints "first"
   document.write(weakMap.get(obj4));
   document.write("</br>");

// Deletes the element having key of objKey4. Prints "true"
   document.write(weakMap.delete(obj4));
   document.write("</br>");

// Deletes all the elements of the weak map
   weakMap.clear();

</script>
</body>
</html>

Đầu ra

true
fourth
true