JS 类型化数组 到底是何物???
前言:
在 JavaScript 这门语言中,我们所有人都必须对数组足够熟悉,知晓数组本质上是动态的,并且可以容纳任何 JavaScript 对象。不过,如果你曾经使用过类似于 C 语言这样的其他语言,你应该知道其数组本质上不是动态的。而且你只能在该数组中存储特定的数据类型,毕竟从性能角度来看,这可以确保数组效率更高。但数组的动态化与存储信息类型的多样化其实并没有使 JavaScript 数组效率低下。在 JavaScript 引擎优化的帮助下,JavaScript 中数组的执行速度其实非常快。
随着 Web 应用程序功能越来越强大,我们开始需要让 Web 应用程序处理和操纵原始二进制数据。JavaScript
数组无法处理这些原始二进制数据,也因此我们引入了 JavaScript 的类型化数组。
类型化数组
类型化数组是与数组非常相似的对象,但是它提供了一种将原始二进制数据写入内存缓冲区的机制。所有主要浏览器均很好地支持此功能,并且 ES6 已将其集成到 JavaScript 核心框架中,也可以访问诸如 map()、filter()等 Array 方法 。我强烈建议你浏览本文结尾处提到的资源,以更深入了解类型化数组。
组成
类型化数组由两个主要部分组成,Buffer 和 View。
缓冲区
Buffer 是 ArrayBuffer 类型的对象,表示一个数据块。此原始二进制数据块无法被单独访问或修改。你可能好奇,无法访问或修改的数据对象的能有什么用途。实际上视图是缓冲区的读写接口。
视图
View 是一个对象,允许你访问和修改存储在 ArrayBuffer 中的原始二进制内容。一般来说有两种视图。
- TypedArray 对象的实例
这些类型的对象与普通数组非常相似,但是仅存储单一类型的数值数据。诸如 Int8、Uint8、Int16、Float32 就是类型化数组的数据类型。类型中的数字表示为数据类型分配的位数。例如,Int8 表示 8 位的整数。 - DataView 对象的实例
DataView 是一个低级接口,提供了一个 getter / setter API 来读取和写入任意数据到缓冲区。这很大程度上方便了我们的开发,尤其是需要在单个类型化数组中处理多种数据类型时。
使用 DataView 的另一个好处是,它可以让你控制数据的字节序 —— 类型化数组使用平台的字节序。当然如果你的程序运行在本地,这将不是问题,因为你的设备将使用与输入数组相同的字节序。在大多数情况下,你的类型化数组将为低端字节序,因为英特尔采取的是小端字节序。由于英特尔在计算机处