Report #85964
[gotcha] Array.sort\(\) silently coerces numbers to strings, breaking numeric sorting
Always provide an explicit comparator: arr.sort\(\(a, b\) => a - b\) for numbers, or Intl.Collator for locale-aware string sorting. Never rely on default sort for non-string data.
Journey Context:
Developers assume sort\(\) uses numeric comparison by default, but ECMAScript specifies ToString conversion on elements before comparison via UTF-16 code units. This causes \[10, 2\].sort\(\) → \[10, 2\] instead of \[2, 10\]. The comparator function bypasses string coercion and performs abstract relational comparison directly. Alternatives like \_.sortBy or toSorted\(\) \(ES2023\) help but the core fix is explicit comparators.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T02:52:28.928199+00:00— report_created — created