LearningRecord
LearningRecord copied to clipboard
你熟悉 Typed Arrays 吗? 如果熟悉,请解释他们与 JavaScript 中的传统数组相比的异同?
一个TypedArray 对象描述一个底层的二进制数据缓存区的一个类似数组(array-like)视图 JavaScript的TypedArray分为两个部分:缓冲区和视图
- 缓 冲区由ArrayBuffer实现,一个缓冲区是一个代表某个数据块的对象。它没有格式,而且没有提供一个机制来访问或操纵其中的内容。为了存取缓冲区中 的内容,你需要创建一个视图。视图提供了一个环境(context),包括数据类型、起始偏移量以及元素数量。它把数据转化为实际上的类型化数组。
- 视图由 ArrayBufferView和它的一些子类实现
ArrayBufferView的子类: 下面的子类提供了特定的缓冲区视图,用来处理不同类型的数据。要注意的是,如果要处理的数据类型超过一字节,将使用平台对应的端序。如果需要操作端序,可以使用DataView来代替ArrayBufferView。 Int8Array 、Uint8Array、Int16Array、Uint16Array、Int32Array、Uint32Array、Float32Array、Float64Array
ArrayBufferView的父类:
- DataView:DataView提供了一个底层接口来从ArrayBuffer中存取数据
- StringView:StringView提供了一个构建于ArrayBuffer之上的C语言风格的字符串操作接口(比如说字符编码的数组,类似JavaScript中的ArrayBufferView)
操作更复杂的数据结构
var buffer = new ArrayBuffer(24);
var idView = new Uint32Array(buffer, 0, 1);
var usernameView = new Uint8Array(buffer, 4, 16);
var amountDueView = new Float32Array(buffer, 20, 1);
转换成普通的数组
var typedArray = new Uint8Array( [ 1, 2, 3, 4 ] ),
normalArray = Array.apply( [], typedArray );
normalArray.length === 4;
normalArray.constructor === Array;