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-кодовой единицы.