Binary strings

JavaScript strings 是 UTF-16 编码的字符串。它的一个子集是 ASCII 字符集 (i.e., 字符的码点不会超过 127)。比如,  "Hello world!"这个字符串属于 ASCII 子集,而 "ÀÈÌÒÙ" 不属于 ASCII。binary string 是 JS 字符集的另外一个子集,它类似于 ASCII 字符集,但是字符的码点 (charCode) 不再限制到 127, 它包含了255 以内的字符。 binary string 设计的目的不是用于代表字符, 而是代表二进制数据。由 binary string 代表的二进制数据大小是原始数据的两倍,然而这对于最终用户是不可见的, 因为 JavaScript strings 的长度是以 2 字节为单位进行计算的。

Binary strings 不是 JavaScript 语言的设计。 然而至少有一个 native 函数以它作为输入 ,比如btoa(): 给这个函数传入 charcode 大于255 的字符串会抛出一个 Character Out Of Range 的错误。

引入 Binary strings 来代表uint8 数字的原因是由于 web 应用变得越来越强大 (比如操作音频和视频, 使用 WebSockets 获取二进制数据, 等等) 很明显,有一种可以让 JavaScript 可以简单而快速地操作二进制数据的 api 将会提供很大的帮助。

在以前, 操作二进制数据必须通过对字符串的操作来模拟。使用 charCodeAt() 方法从 Binary strings 读取数据。然而这么做又慢又容易出错, 因为需要多次转换 (尤其是当数据不是真正的 byte-format data,而是 32-bit 整数或者浮点数)。

JavaScript typed arrays 提供了一个操作 二进制数据更加高效的方法。StringView 这个非 native 的构造函数是构建在 typed arrays 上的为字符串提供了一个 C-like 的接口。

参见