unicode

В процессе написания программ, язык JavaScript использует набор символов Unicode, поддерживающий фактически все виды письменных языков, существующих в наше время. Пользователь имеет возможность использования не только расположенных на своей клавиатуре символов, но и символов любых прочих языков. Такое обширное языковое преимущество над аналогами, набор символов Unicode получил благодаря 16-разрядной кодировке. Такие возможности JavaScript станут весьма полезными не только англоязычным программистам, другими словами — Unicode является интернациональным набором символов.

0123456789ABCDEF
0400ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ
0410АБВГДЕЖЗИЙКЛМНОП
0420РСТУФХЦЧШЩЪЫЬЭЮЯ
0430абвгдежзийклмноп
0440рстуфхцчшщъыьэюя
0450ѐёђѓєѕіїјљњћќѝўџ

В идентификаторах Javascript допускается применение символов Юникода. В ECMAScript тоже используются символы Юникода из категории Mn (Метка: безразрывная), Mc (Метка: комбинированная) и Pc (Пунктуация: соединительные знаки пунктуации) при условии, что они не являются первыми символами идентификаторов.

Для того, чтобы получить одинаковый результат часто используют  суррогатную пару, которая состоит из последовательных символов. Но, стоит отметить, что на первый взгляд похожие результаты при использовании оператора идентичности === или оператора равенства == не будут совпадать друг с другом. Также, если сравнить длину символов, то она окажется разной.

Все дело в том, что свойство length не воспринимает суррогатные пары и считает 16 бит единственным символом. А операторы равенства и идентичности сравнивают двоичные разряды и тоже игнорируют суррогатные значения. Для решения подобного рода задач применяют метод нормализации normalize(), с помощью которого суррогатные пары преобразовывают в 16-ти битное представление символов.