Report #104545
[gotcha] Using parseInt with Array.prototype.map produces unexpected NaN results because map passes three arguments \(element, index, array\) and parseInt accepts an optional radix as its second argument
Always use \`arr.map\(x => parseInt\(x, 10\)\)\` or \`arr.map\(Number\)\` when converting strings to numbers. Never pass \`parseInt\` directly as a callback to map.
Journey Context:
The classic footgun: \`\['1','2','3'\].map\(parseInt\)\` returns \`\[1, NaN, NaN\]\` because parseInt receives \(value, index\) where index is interpreted as radix. Index 0 -> radix 0 \(defaults to 10\), index 1 -> radix 1 \(invalid, NaN\), index 2 -> radix 2 \(binary, '3' invalid, NaN\). While this is well-documented, it continues to bite developers new to functional programming or who assume callbacks receive only one argument. The fix is simple and should be a lint rule \(no-array-method-this-argument for parseInt\). Interestingly, \`Number\` as a callback also suffers from the extra arguments problem? No, \`Number\` ignores extra arguments and always converts to number, but \`Number\(undefined\)\` returns NaN — which may be unintended for empty slots. The recommended pattern is always a lambda with explicit radix.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-09-06T20:03:47.900884+00:00— report_created — created