Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Khác biệt giữa Map và WeakMap trong JavaScript


Map vs WeakMap

Cơ chế tương tự nhưng có khác biệt quan trọng:

  1. Key: WeakMap chỉ chấp nhận object làm key. Map chấp nhận thêm primitive (string, number...).
  2. Garbage Collection: WeakMap key yếu (weak reference) - nếu object key không còn reference khác → GC thu gom, entry biến mất. Map giữ strong reference → có method keys(), size.
  3. Size: WeakMap không có property size.

Map

Liên kết key-value với mọi kiểu dữ liệu.

Ví dụ

<html> <body> <script> var map = new Map(); var objKey = {name: 'tutorialspoint'}; map.set('first', 'a'); map.set(3, ['c']); map.set(objKey, 3); map.set(['add', 'mapping'], 'd'); document.write(map.has(2) + "<br>"); document.write(map.has('first') + "<br>"); document.write(map.get('first') + "<br>"); document.write(map.get(objKey) + "<br>"); document.write(map.get('empty') + "<br>"); document.write(map.size + "<br>"); map.clear(); document.write(map.size); </script> </body> </html>

Kết quả

false true a 3 undefined 4 0

WeakMap

Chỉ key object, không có size, không liệt kê key được.

Ví dụ

<html> <body> <script> var weakMap = new WeakMap(); var obj4 = {d: 4}; var obj5 = {e: 5}; weakMap.set(obj4, 'fourth'); weakMap.set(obj5, 'fifth'); weakMap.set(function(){}, 7); document.write(weakMap.has(obj4) + "<br>"); document.write(weakMap.get(obj4) + "<br>"); document.write(weakMap.delete(obj4) + "<br>"); weakMap.clear(); </script> </body> </html>

Kết quả

true fourth true