charCodeAt и fromCharCode не возвращают один и тот же символ

Теоретически, независимо от того, что является вводом, вывод должен быть неизменным:

String.fromCharCode("a".charCodeAt(0));    //"a"

Это имеет смысл, потому что я просто пытаюсь получить код символа персонажа, а затем приводить его обратно к персонажу.

Однако, когда я пытаюсь с этим персонажем, он ломается:

//"": 55356
String.fromCharCode("".charCodeAt(0));    //"�" (65533)

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

Почему это происходит и как я могу это исправить?

Я заметил, что есть новый метод в ES6, String.fromCodePoint() но он не поддерживается всеми браузерами, кроме Firefox.

1 ответ

Это не меняет.

> String.fromCharCode("".charCodeAt(0)).charCodeAt(0)
  55356

И вы можете проверить все по:

for (var i = 0; i <= 65535; i++) {
   if (String.fromCharCode(i).charCodeAt(0) !== i) {
       console.log('error', i, String.fromCharCode(i)); 
   }
}

Почему ты видел это потому что (65533) используется для замены символа, значение которого неизвестно или непредставимо в юникоде.

Это называется ЗАМЕНА ХАРАКТЕР.

Другие вопросы по тегам