Report #97702
[gotcha] Array.prototype.map skips holes in sparse arrays created by new Array\(n\)
Instead of \`new Array\(n\).map\(...\)\`, use \`Array.from\(\{ length: n \}, \(\_, i\) => ...\)\` or \`\[...Array\(n\)\].map\(...\)\` \(spread operator fills holes with \`undefined\`\). For a sparse array, \`map\` only visits indices that exist \(0 to length-1 but not holes\).
Journey Context:
Constructing an array with \`new Array\(3\)\` creates a sparse array of length 3 with no own indices \(holes\). The \`map\` method checks the internal \[\[HasProperty\]\] and skips holes entirely, returning another sparse array with holes. This contrasts with \`Array.from\` or \`fill\(0\)\` which populate all indices. The behavior is documented in the ES spec and catches even experienced developers who assume \`map\` iterates over the full index range. The fix using \`Array.from\` is both concise and creates a dense array.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-25T15:53:16.927400+00:00— report_created — created