Вы почти правы. Он основан на юникод-кодовых модулях (а не на кодовых точках, это 16-разрядная кодированная версия), а не ascii на значения.
От ECMAScript 2015 specification:
If both px and py are Strings, then
If py is a prefix of px, return false. (A String value p is a prefix of String value q if q can be the result of concatenating p and some other String r. Note that any String is a prefix of itself, because r may be the empty String.)
If px is a prefix of py, return true.
Let k be the smallest nonnegative integer such that the code unit at index k within px is different from the code unit at index k within py. (There must be such a k, for neither String is a prefix of the other.)
Let m be the integer that is the code unit value at index k within px.
Let n be the integer that is the code unit value at index k within py.
If m < n, return true. Otherwise, return false.
Примечание2
Сравнение строк использует простой лексикографический порядок последовательностей кода единичных значений. Нет попытки использовать более сложные, семантически ориентированные определения символа или строки . Порядок равенства и упорядочения, определенный в спецификации Юникода. Поэтому значения String, которые являются канонически равными в соответствии со стандартом Unicode , могут быть неравными. По сути, этот алгоритм предполагает, что обе строки уже в нормализованной форме. Кроме того, обратите внимание на то, что для строк, содержащих дополнительные символы, лексикографический порядок упорядочения значений кодовых единиц UTF-16 отличается от последовательности на последовательностей значений кодовой точки.
В основном это означает, что сравнение строк на основе lexicographical order из «кодовых единиц», который является числовым значением Юникода.
вы близки: значение unicode имеет значение при сравнении двух 'String' – dandavis
'console.log ('a'> '+'); // true' – Sirko
@ ZakariaAcharki - Более глубокое понимание. – cookie