Learn JavaScript

codePointAt() - метод для получения Unicode-кода символа в JavaScript

codePointAt() возвращает Unicode-код символа строки по индексу.

Этот метод особенно полезен для emoji и других символов, которые в UTF-16 занимают больше одной кодовой единицы.

Синтаксис

str.codePointAt(index)

Метод вызывается у строки и возвращает число.

Если индекс не передать, будет использован 0.

console.log("ABC".codePointAt()); // 65

Как работает codePointAt()

const text = "ABC";

console.log(text.codePointAt(0)); // 65
console.log(text.codePointAt(1)); // 66
console.log(text.codePointAt(2)); // 67

Индекс начинается с 0, как и в других строковых операциях JavaScript.

Что возвращает метод

codePointAt() возвращает число с Unicode-кодом символа.

console.log("A".codePointAt(0)); // 65
console.log("a".codePointAt(0)); // 97

Если индекс вне диапазона, метод вернёт undefined.

const text = "abc";

console.log(text.codePointAt(10)); // undefined
console.log(text.codePointAt(-1)); // undefined

Зачем нужен codePointAt()

Для обычных букв разница между codePointAt() и charCodeAt() часто незаметна.

Но для emoji и некоторых Unicode-символов разница важна:

const text = "😀";

console.log(text.charCodeAt(0));  // 55357
console.log(text.codePointAt(0)); // 128512

charCodeAt() возвращает только первую UTF-16-часть символа, а codePointAt() - полный Unicode-код.

codePointAt() и charCodeAt()

Для простых символов результат может совпадать:

const text = "A";

console.log(text.charCodeAt(0));  // 65
console.log(text.codePointAt(0)); // 65

Но для emoji и некоторых редких символов лучше использовать codePointAt().

const text = "😀";

console.log(text.charCodeAt(0));  // 55357
console.log(text.codePointAt(0)); // 128512

Важный момент с индексом

codePointAt() корректно возвращает полный код символа, если индекс указывает на его начало.

const text = "😀";

console.log(text.codePointAt(0)); // 128512

Но если передать индекс второй части surrogate pair, результат будет уже другим:

const text = "😀";

console.log(text.codePointAt(1)); // 56832

Поэтому этот метод обычно вызывают на индексе начала символа.

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

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

  • нужен Unicode-код символа
  • в строке могут быть emoji
  • важна корректная работа с Unicode-символами вне базовой таблицы

Пример:

const symbol = "😀";

console.log(symbol.codePointAt(0)); // 128512

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

Использовать charCodeAt() для emoji

console.log("😀".charCodeAt(0));  // 55357
console.log("😀".codePointAt(0)); // 128512

Если нужен полный Unicode-код, лучше брать codePointAt().

Забывать, что вне диапазона будет undefined

const text = "abc";

console.log(text.codePointAt(10)); // undefined

Это поведение отличается от charCodeAt(), который вернёт NaN.

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

const text = "😀";

console.log(text.codePointAt(1)); // 56832

Для символов, которые занимают две UTF-16-части, индекс должен указывать на начало.

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

  • codePointAt(index) возвращает Unicode-код символа
  • если индекс не передать, используется 0
  • если индекс вне диапазона, метод вернёт undefined
  • для emoji и некоторых Unicode-символов codePointAt() удобнее, чем charCodeAt()
  • метод лучше вызывать на индексе начала символа

Коротко

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