Esta sección ahonda en los interioridades de los string. Este conocimiento será útil para ti si planeas lidiar con emojis, raros caracteres matemáticos, jeroglíficos, u otros símbolos extraños.
Como ya mencionamos, los strings de JavaScript están basados en Unicode: cada carácter está representado por una secuencia de entre 1 y 4 bytes.
JavaScript nos permite insertar un carácter en un string por medio de su código hexadecimal Unicode, usando estas tres notaciones:
-
\xXXXXdeben ser dos dígitos hexadecimales con un valor entre00yFF. Entonces,\xXXes el carácter cuyo código Unicode esXX.Como la notación
\xXXadmite solo dos dígitos hexadecimales, puede representar solamente los primeros 256 caracteres Unicode.Estos primeros 256 caracteres incluyen el alfabeto latino, la mayoría de caracteres de sintaxis básicos, y algunos otros. Por ejemplo,
"\x7A"es lo mismo que"z"(UnicodeU+007A).alert( "\x7A" ); // z alert( "\xA9" ); // ©, el símbolo de copyright -
\uXXXXXXXXdeben ser exactamente 4 dígitos hexadecimales con un valor entre0000yFFFF. Entonces,\uXXXXes el carácter cuyo código Unicode esXXXX.Caracteres con un valor Unicode mayor que
U+FFFFtambién pueden ser representados con esta notación, pero en ese caso necesitamos usar los llamados “pares sustitutos”, descritos más adelante.alert( "\u00A9" ); // ©, lo mismo que \xA9, usando la notación de 4 dígitos hexa alert( "\u044F" ); // я, letra del alfabeto cirílico alert( "\u2191" ); // ↑, símbolo flecha -
\u{X…XXXXXX}X…XXXXXXdebe ser un valor hexadecimal de 1 a 6 bytes entre0y10FFFF(el mayor punto de código definido por Unicode). Esta notación nos permite fácilmente representar todos los caracteres Unicode existentes.alert( "\u{20331}" ); // 佫, un raro carácter chino alert( "\u{1F60D}" ); // 😍, un símbolo de cara sonriente
Pares sustitutos
Todos los caracteres frecuentes tienen códigos de 2 bytes (4 dígitos hexa). Las letras de la mayoría de los lenguajes europeos, números, los conjuntos básicos de caracteres ideográficos CJK unificados (CJK: de los sistemas chino, japonés y coreano), tienen un representación de 2 bytes.
Inicialmente, JavaScript estaba basado en la codificación UTF-16 que solo permite 2 bytes por carácter. Pero 2 bytes solo permiten 65536 combinaciones y eso no es suficiente para cada símbolo Unicode posible.
Entonces, los símbolos raros que requieren más de 2 bytes son codificados con un par de caracteres de 2 bytes llamado “par sustituto”.
Como efecto secundario, el largo de tales símbolos es 2: