JavaScript имеет проблему с Unicode.
Строки в JavaScript являются последовательностями единиц кода. Разумно ожидать, что сравнение строк включает в себя оценку кодовых единиц для совпадения.
const firstStr = 'hello';
const secondStr = '\u0068ell\u006F';
console.log(firstStr === secondStr); // => true
firstStr и secondStr имеют одинаковую последовательность кодовых единиц. Разумно, что они равны.
Предположим, вы хотите сравнить две строки, которые выглядят одинаково, но содержат разные последовательности единиц кода. Тогда вы можете получить неожиданный результат, потому что строки, которые визуально выглядят одинаково, не равны в сравнении:
const str1 = 'ça va bien';
const str2 = 'c\u0327a va bien';
console.log(str1); // => 'ça va bien'
console.log(str2); // => 'ça va bien'
console.log(str1 === str2); // => false
str1 и str2 при рендеринге выглядят одинаково, но имеют разные кодовые единицы. Это происходит потому, что графема может быть построена двумя способами:
Using U+00E7 LATIN SMALL LETTER C WITH CEDILLA
Or using a combining character sequence: U+0063 LATIN SMALL LETTER C plus the combining mark U+0327 COMBINING CEDILLA.
Справочные ссылки:
Javascript имеет проблему Unicode
Javascript Юникод