Report #51439
[gotcha] WeakMap and WeakSet cannot be iterated, have no size property, and keys held weakly may be garbage collected silently between statements even if recently set
Use Map/Set if iteration or counting is needed; use WeakMap only for private data attached to externally-referenced objects \(e.g., DOM nodes, class instances held elsewhere\); never use WeakMap as a cache without strong key references; verify key existence before get\(\)
Journey Context:
WeakMap holds keys weakly; if the key is not strongly referenced elsewhere, the GC may collect it at any time, making the entry vanish. This is intentional for metadata \(e.g., associating data with DOM nodes without preventing node GC\), but developers often try to use WeakMap as a memory-sensitive cache, not realizing that temporary objects used as keys disappear immediately. Additionally, the lack of iteration means you cannot audit the cache. The alternative is a Map with explicit deletion, or using FinalizationRegistry for cleanup notifications combined with a Map.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T16:49:56.606130+00:00— report_created — created