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

WeakSet.has() trong JavaScript

WeakSet.has() kiểm tra xem một object có tồn tại trong WeakSet hay không, trả về true hoặc false.

Đặc điểm WeakSet

  • Chỉ lưu trữ object (không phải primitive).
  • Tham chiếu yếu (weak reference): object trong WeakSet có thể bị garbage collect nếu không có tham chiếu khác.
  • Không thể duyệt (non-iterable), không có size, không hỗ trợ clear().
  • Phương thức: add(), has(), delete().

Cú pháp

weakSet.has(object); // true / false

Ví dụ 1: Object tồn tại

<script>
  const ws = new WeakSet();
  const obj = { id: 1, name: 'Item' };
  ws.add(obj);
  document.write(ws.has(obj)); // true
</script>

Ví dụ 2: Object không tồn tại

<script>
  const ws = new WeakSet();
  const obj1 = { id: 1 };
  const obj2 = { id: 2 }; // Object khác (dù cùng nội dung)
  ws.add(obj1);
  document.write(ws.has(obj2)); // false — so sánh tham chiếu, không phải giá trị
</script>

Lưu ý quan trọng

  • WeakSet so sánh bằng tham chiếu (reference equality), không phải giá trị. Hai object cùng nội dung nhưng khác instance → false.
  • Không dùng được với primitive: ws.has('string') → TypeError.
  • Ứng dụng thực tế: lưu metadata tạm cho object (cached data, flags) mà không ngăn GC.

So sàng Set vs WeakSet

Đặc điểmSetWeakSet
Lưu được primitiveCóKhông
IterableCóKhông
Có sizeCóKhông
Chặn Garbage CollectionCóKhông (weak ref)
has() so sánhGiá trị (value equality)Tham chiếu (reference equality)