Сравнение двух букв возвращает false, но их символ в Юникоде одинаков. - PullRequest
0 голосов
/ 25 мая 2020

(Что это за колдовство?)

У меня есть два символа, которые выглядят одинаково, но при сравнении они разные:

console.log("i" === "i︆") // false

Затем я сравнил их код которые говорят мне, что это то же самое, что еще более странно:

console.log("i".charCodeAt(0), "i︆".charCodeAt(0)) // 105 105

Но, наконец, я нашел проблему, длина обоих символов не одинакова:

console.log("i".length, "i︆".length) // 1 2

Я интересно:

  • Есть ли какое-нибудь объяснение, почему длина обоих символов не одинакова?
  • Есть ли способ преобразовать оба символа, чтобы сравнение работало?

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Второй имеет невидимый персонаж (65030) на позиции 1.

 console.log("i︆".charCodeAt(0), "i︆".charCodeAt(1))

Это означает, что они не «строго» равны.

0 голосов
/ 25 мая 2020

Второй символ - это невидимый символ с кодом 65030, который принадлежит блоку "VARIATION SELECTOR" стандарта Unicode. Когда я скопировал ваш пример, я получил то же самое, но когда вы его напечатаете, он вернет ИСТИНА. Результат с копировальной пастой:

console.log("i".charCodeAt(0),"i".charCodeAt(1),"i︆".charCodeAt(0),"i︆".charCodeAt(1),"i︆".charCodeAt(2))
105 NaN 105 65030 NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...