El método codePointAt
de JavaScript tiene más o menos la misma función que el método charCodeAt, usado para obtener la representación Unicode de 16 bits del carácter que esté en una determinada posición de una cadena.
Sin embargo, ciertos caracteres presentan un pequeño problema, ya que usan dos unidades de 16 bits, por lo que el método charCodeAt
solamente nos devolverá la mitad de la representación de estos caracteres especiales.
El método codePointAt
se introdujo en JavaScript en su versión ES2015 con el objetivo de obtener representaciones Unicode de caracteres que usan dos unidades de 16 bits en lugar de una sola. En genera, podrás obtener todos los caracteres latinos o sajones mediante el método charCodeAt
, pero no ocurrirá lo mismo con caracteres chinos o japoneses. El método codePointAt
acepta como parámetro el índice de la cadena sobre la cual apliquemos el método, que podrá ser una cadena estándar declarada con comillas simples o dobles, un objeto de tipo String
o una plantilla literal.
El valor devuelto por el método codePointAt
será undefined
cuando el índice que le pasemos al método no tenga representación.
Por ejemplo, para obtener la representación Unicode en decimal o hexadecimal formada por dos unidades Unicode UTF-16 del carácter 𠮷
tendríamos que usar dos veces el método charCodeAt
:
// Representación decimal
const primeraParte = '𠮷'.charCodeAt(0); // 55362
const segundaParte= '𠮷'.charCodeAt(1); // 57271
// Representación hexadecimal
const primeraParteHex = '𠮷'.charCodeAt(0).toString(16); // d842
const segundaParteHex = '𠮷'.charCodeAt(1).toString(16); // dfb7
Puedes comprobar que si unes ambas partes y las muestras por la consola, obtienes el carácter 𠮷
:
console.log('\ud842\udfb7'); // 𠮷
Sin embargo, es posible obtener la representación del carácter usando una única vez el método codePointAt
:
// Representación decimal
const decimal = '𠮷'.codePointAt(0); // 134071
// Representación hexadecimal
const hexadecimal = '𠮷'.codePointAt(0).toString(16); // 20bb7
Para comprobar que el resultado es correcto, basta con que muestres el resultado por la consola:
console.log('\u{20bb7}');
Si usas un objeto de tipo String
, el proceso es exactamente el mismo:
const cadena = new String('𠮷');
// Representación decimal
const decimal = cadena.codePointAt(0); // 134071
// Representación hexadecimal
const hexadecimal = cadena.codePointAt(0).toString(16); // 20bb7
Esto ha sido todo.