Report #104466
[gotcha] Array.sort\(\) does not sort numbers correctly without a compare function — it converts elements to strings
Always pass a compare function to Array.sort\(\) for numeric arrays: arr.sort\(\(a, b\) => a - b\). For ascending, use \(a, b\) => a - b; for descending, \(b, a\) => a - b. Never rely on the default sort for numbers.
Journey Context:
The default sort algorithm converts each element to a string and compares UTF-16 code unit values. This means \[1, 30, 4\].sort\(\) yields \[1, 30, 4\] \(since '30' < '4' lexicographically\). This behavior is documented but consistently surprises developers. The spec does not guarantee a stable sort \(though V8 now uses TimSort which is stable\). The fix is trivial — provide a compare function — but the default behavior is a classic footgun. The ECMAScript spec explicitly says the default comparator is string-based.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-08-23T20:04:48.484583+00:00— report_created — created