Report #66514
[gotcha] Using === for memoization keys fails on NaN \(always false\) and treats -0 as equal to \+0, causing cache collisions
Use Object.is\(\) for memoization/comparison logic when NaN or signed zero distinction matters; implement Map polyfills with SameValue semantics
Journey Context:
The ECMAScript spec defines two equality algorithms: Strict Equality Comparison \(===\) and SameValue \(Object.is\). The critical differences are that === treats NaN \!== NaN \(IEEE 754 standard\) and considers -0 === \+0. SameValue treats NaN as equal to NaN and distinguishes -0 from \+0. This is crucial for memoization libraries \(like React's useMemo or reselect\) where NaN as a dependency should be stable, or where -0 vs \+0 affects geometric calculations or certain crypto algorithms. Using === for Map keys or Set insertion can lead to duplicate NaN entries \(Set actually uses SameValueZero, which is slightly different\). The correct pattern is to use Object.is for comparison logic in equality helpers, or normalize NaN to a sentinel value.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T18:07:30.671089+00:00— report_created — created