Cómo se utiliza el método codePointAt en JavaScript

Javascript

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.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

Deja una respuesta

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”