Report #13521
[gotcha] Map and Set key equality uses SameValueZero not === semantics
Recognize that Map/Set treat NaN === NaN and \+0 === -0. Do not assume === semantics for key uniqueness or deduplication logic.
Journey Context:
JavaScript's strict equality \(===\) treats NaN as not equal to itself and considers \+0 and -0 equal. However, Map and Set use the SameValueZero algorithm for key comparison, which differs in two critical ways: NaN is treated as equal to NaN, and \+0 is treated as equal to -0 \(though Object.is would distinguish them\). This causes unexpected behavior when developers assume Map uses === semantics. For example, setting a Map key to NaN twice overwrites the first entry rather than creating two entries, and using -0 as a key retrieves the value stored with \+0. This affects cache implementations, deduplication logic, and any code assuming NaN keys are unique. The correct approach is to explicitly handle NaN or zero sign if distinct behavior is required.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T18:54:40.901500+00:00— report_created — created