Действительно ли один двухбайтовый символ сравнивается с другим в функции сортировки?
Собственный тип String
в JavaScript основан на единицах кода UTF-16, и это то, что сравнивается. Для символов в базовой многоязычной плоскости (которые все они) это то же самое, что и кодовые точки Unicode.
Термин «двухбайтовый», как и в кодировках, подобных Shift-JIS, не имеет смысла в веб-контексте: строки DOM и JavaScript изначально являются Unicode, оригинальные байты на кодированной странице, полученные браузером, давно ушли.
Значит ли результат такого рода вообще что-нибудь?
Литтл. Кодовые точки Unicode не претендуют на то, чтобы предлагать какой-либо конкретный заказ ... для одного, потому что не является глобально принятым заказом. Даже для самого основного случая латинских символов ASCII, языки не совпадают (например, относительно того, являются ли v
и w
одинаковыми буквами, или прописные буквы i
равны I
или İ
). И CJK становится намного хуже, чем это.
Главный блок Unicode CJK Unicode CJK упорядочен по радикалам и количеству штрихов (порядок словаря Канси), что может быть весьма полезным. Но используйте символы из любых других блоков расширения CJK или смешайте их в кане или ромадзи, и между ними не будет значимого упорядочения.
Консорциум Unicode пытается определить некоторые общие правила упорядочения, но это сложно и обычно не предпринимается на уровне языка. Системы, которые действительно нуждаются в способностях сортировки с учетом языка (например, ОС, базы данных), как правило, имеют свои собственные схемы сортировки.
Это отличается от заказа японского слога
Да. Помимо проблем сопоставления в целом, очень сложно точно обработать кандзи с помощью слога, потому что вы должны угадывать произношение. JavaScript не может реально знать, что под «藤 本» вы подразумеваете «Fujimoto», а не «touhon»; Для такого рода вещей требуются глубокие встроенные словари и все еще ненадежная эвристика ... а не то, что вы хотите встроить в язык программирования.