2014-09-23 3 views
0

В консоли JavaScript в Google типа хромированной следующий код:Почему «i» не соответствует «i̇»?

"i" == "i̇" 

и понять, что она возвращает ложь. Но оба они имеют одинаковый код символов (105).

Как и почему это возможно?

После замечаний, я понимаю, второй я есть 2 символа, но второй символ был сделан из следующего кода:

"İ".toLowerCase() // outputs i̇ 

также

"İ".length // returns 1 

Как и почему Javascript .toLowerCase() может рассчитывать длина символа?

+4

Второй «я» на самом деле не «я». – Pointy

+0

Просто скопируйте/вставьте следующий код, который я написал и посмотрю. –

+1

Есть дополнительный символ после «i» во второй строке. – Pointy

ответ

7
console.log("i".length, "i̇".length) 
> 1 2 

Вторая строка имеет дополнительный символ. Результат - false, так как две строки не совпадают.

Если мы используем charCodeAt(), мы можем видеть, что этот дополнительный символ является символом Unciode 775, известным как combining dot above.

̇ комбинируя точка над 014077750x307̇

+0

Привет, вы можете объяснить это http://jsfiddle.net/6j8w71tf/2/, почему оно возвращает false, но длина равна – andrex

+0

@Andrex, ваш jsfiddle не показывает длину из «i» (с комбинированной точкой), но в два раза больше длины «i». –

5

Строка правая имеет два символа: i и "объединение тильдой" после этого. Вы можете сказать, просто взглянув на название вашего вопроса!

+0

вы также можете объяснить это http://jsfiddle.net/6j8w71tf/2/ – andrex

+1

@andrex Вторая строка в вашей скрипке также включает в себя еще один символ Юникода (символ 775, «сочетание точки выше»). – Pointy

+0

действительно? как прийти в «i'.length, равном одному, я не верю, что нет лишнего персонажа, я использовал побег – andrex

Смежные вопросы