Learn JavaScript

String.fromCharCode() - статический метод для создания строки из кодов символов в JavaScript

String.fromCharCode() создаёт строку из числовых кодов символов.

Это статический метод объекта String, который работает с UTF-16-кодовыми единицами.

Синтаксис

String.fromCharCode(num1)
String.fromCharCode(num1, num2, ...)

Метод возвращает новую строку.

Как работает String.fromCharCode()

console.log(String.fromCharCode(65)); // "A"
console.log(String.fromCharCode(66)); // "B"

Если передать несколько чисел, метод соберёт строку из нескольких символов:

console.log(String.fromCharCode(72, 101, 108, 108, 111)); // "Hello"

Это статический метод

String.fromCharCode() вызывается у String, а не у самой строки.

Правильно:

String.fromCharCode(65); // "A"

Неправильно:

// "A".fromCharCode(65); // Ошибка

Когда это полезно

String.fromCharCode() удобно использовать, когда:

  • нужно собрать строку из кодов символов
  • данные уже приходят в виде чисел
  • нужно работать с UTF-16-кодовыми единицами

Пример:

const codes = [74, 83];
const text = String.fromCharCode(...codes);

console.log(text); // "JS"

Обычные символы

Для букв, цифр и многих обычных символов метод работает просто и ожидаемо.

console.log(String.fromCharCode(97));  // "a"
console.log(String.fromCharCode(49));  // "1"
console.log(String.fromCharCode(9731)); // "☃"

Несколько символов сразу

String.fromCharCode() умеет принимать сразу несколько кодов.

console.log(String.fromCharCode(72, 105, 33)); // "Hi!"

Это удобно, если строка уже хранится как набор чисел.

String.fromCharCode() и charCodeAt()

Эти методы часто удобно понимать в паре:

  • charCodeAt() получает код символа из строки
  • String.fromCharCode() делает строку из кода
const letter = "A";
const code = letter.charCodeAt(0);

console.log(code); // 65
console.log(String.fromCharCode(code)); // "A"

Важный момент: UTF-16

String.fromCharCode() работает с UTF-16-кодовыми единицами, а не с полными Unicode-кодовыми точками.

Для обычных символов это почти не заметно, но для emoji и некоторых редких символов это важно.

console.log(String.fromCharCode(0xD83D, 0xDE00)); // "😀"

Здесь emoji собирается из двух UTF-16-частей.

Если передать полный Unicode-код одной цифрой, результат может быть неожиданным:

console.log(String.fromCharCode(0x1F600)); // ""

Это происходит потому, что метод не работает напрямую с полной Unicode-кодовой точкой.

String.fromCharCode() и String.fromCodePoint()

Для символов вне базовой таблицы Unicode обычно удобнее String.fromCodePoint().

console.log(String.fromCharCode(0xD83D, 0xDE00)); // "😀"
console.log(String.fromCodePoint(0x1F600));       // "😀"

Если речь идёт об emoji или редких Unicode-символах, String.fromCodePoint() обычно понятнее и безопаснее.

Частые ошибки

Пытаться вызвать метод у строки

// "A".fromCharCode(65); // Ошибка

String.fromCharCode() - это статический метод String.

Передавать полный Unicode-код для emoji

console.log(String.fromCharCode(0x1F600)); // не тот символ, который ожидают

Для таких случаев лучше использовать String.fromCodePoint().

Путать код символа и индекс

console.log(String.fromCharCode(65)); // "A"

Число здесь - это код символа, а не позиция в строке.

Быстрая памятка

  • String.fromCharCode() создаёт строку из числовых кодов
  • это статический метод, а не метод строки
  • можно передавать сразу несколько кодов
  • метод работает с UTF-16-кодовыми единицами
  • для emoji и некоторых Unicode-символов часто удобнее String.fromCodePoint()

Коротко

String.fromCharCode() - это статический метод JavaScript, который создаёт строку из кодов символов. Он хорошо подходит для обычных UTF-16-значений, но для emoji и некоторых Unicode-символов чаще удобнее использовать String.fromCodePoint().