JavaScript strings son cadenas codificadas en UTF-16. Esto significa que cada unidad de código requiere dos bytes de memoria y puede representar 65535 diferentes puntos de código. Un subconjunto de estas cadenas está representado por cadenas UTF-16 que contienen solo caracteres ASCII (es decir, caracteres cuyo punto de código no excede 127). por ejemplo, el string "Hello world!" pertenece al subconjunto ASCII, mientras que el string "ÀÈÌÒÙ" no. A binario string es un concepto similar al subconjunto ASCII, pero en lugar de limitar el rango a 127permite puntos de código hasta 255. Sin embargo, su propósito no es representar caracteres, sino datos binarios. El tamaño de los datos así representados es el doble de lo que sería en formato binario normal, sin embargo, esto no será visible para el usuario final, ya que la longitud de las cadenas de JavaScript se calcula utilizando dos bytes como unidad.

Las cadenas binarias no forman parte del diseño del lenguaje JavaScript. Sin embargo, al menos una función nativa requiere cadenas binarias como entrada, btoa(): invocarlo en un string que contiene puntos de código mayores que 255 causará un Character Out Of Range error.

La razón que llevó a usar unidades de código UTF-16 como marcadores de posición para uint8 números es que a medida que las aplicaciones web se vuelven más y más poderosas (agregando funciones como manipulación de audio y video, acceso a datos sin procesar usando WebSockets, etc.) ha quedado claro que hay momentos en los que sería útil que el código JavaScript sea capaz de manipular rápida y fácilmente datos binarios sin procesar.

En el pasado, esto tenía que simularse tratando los datos sin procesar como un string y usando el charCodeAt() método para leer los bytes del búfer de datos (es decir, usando cadenas binarias). Sin embargo, esto es lento y propenso a errores, debido a la necesidad de múltiples conversiones (especialmente si los datos binarios no son en realidad datos en formato de byte, sino, por ejemplo, números enteros o flotantes de 32 bits).

Matrices escritas en JavaScript proporcionar un mecanismo para acceder a datos binarios sin procesar de manera mucho más eficiente.

Ver también