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
WeakSetso 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ểm | Set | WeakSet |
|---|---|---|
| Lưu được primitive | Có | Không |
| Iterable | Có | Không |
| Có size | Có | Không |
| Chặn Garbage Collection | Có | Không (weak ref) |
| has() so sánh | Giá trị (value equality) | Tham chiếu (reference equality) |