ArrayBuffer
是原始的二进制数据缓冲区。
TypedArray
是描述一个底层的ArrayBuffer
的类数组视图。
DataView
视图是可以从ArrayBuffer
对象中读写多种数值类型的底层接口。
ArrayBuffer
对象用来表示通用的、固定长度的原始二进制数据缓冲区,是一个字节数组。
只能通过TypedArray
和DataView
来操作其内容。
ArrayBuffer.prototype.byteLength
:表示ArrayBuffer
的byte
大小( 字节长度,一个字节 = 8位 ),如上面的例子里,byteLength
是8通用方法:
ArrayBuffer.isView(arg)
:判断参数是否是ArrayBuffer
的视图实例,TypedArray
和DataView
会返回true
实例方法:
ArrayBuffer.prototype.slice(begin, end)
:返回一个新的ArrayBuffer
,它的内容是这个从begin
开始,end
结束(不包括)TypedArray
不是全局属性,只是类型化数组的叫法。
TypedArray
指的是以下之一:
类型 | 单个元素值的范围 | 大小(bytes) | 描述 |
---|---|---|---|
Int8Array | -128 ~ 127 | 1 | 8位二进制有符号整数 |
Uint8Array | 0 ~ 255 | 1 | 8位无符号整数, 超出范围从另一边界循环 |
Uint8ClampedArray | 0 ~ 255 | 1 | 8位无符号整数, 超出范围后为边界值 |
Int16Array | -32768 ~ 32767 | 2 | 16位二进制有符号整数 |
Uint16Array | 0 ~ 65535 | 2 | 16位无符号整数 |
Int32Array | -2147483648 ~ 2147483647 | 4 | 32位二进制有符号整数 |
Uint32Array | 0 ~ 4294967295 | 4 | 32位无符号整数 |
Float32Array | 1.2×10的-38次方 ~ 3.4×10的38次方 | 4 | 32 位 IEEE 浮点数(7 位有效数字,如 1.1234567 |
Float64Array | 5×10的-324次方 ~ 3.4×10的38次方 | 8 | 64 位 IEEE 浮点数(16 有效数字,如 1.123…15) |
实例参数
length
:创建实例时,传入了length
参数,就会在内存中创建一个数据缓冲区,缓存区大小(byteLength
)就是length
乘以数组中每个元素的字节数(字节数见上表, 入上图 byteLength = 8 * 4
)
TypedArray
的数据结构如下:
typedArray
可以传入任意的类型化数组对象作为参数,typedArray
里的每个值先转化为相应类型然后复制到新的数组里。
buffer [, byteOffset [, length ] ]
传入buffer
参数,创建类型化数组视图,用于呈现ArrayBuffer
实例,byteOffset
和length
指定了类型化数组视图将要暴露的内存范围。
如上图所示,typedArray2
表示的是ArrayBuffer
从2开始,2个字节长度的部分。
属性:如上图所示,包括buffer, byteLength, byteOffset, length
(都是只读的)
方法:同Array
DataView
视图是可以从二进制ArrayBuffer
对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序问题。可以看作是一个知道如何读取和写入时正确转换字节码的解释器
语法
new DataView(buffer [, byteOffset [, byteLength]])
DataView.prototype.getInt8(byteOffset)
从DataView
起始位置以byte
为计数的指定偏移量(byteOffset
)处获取一个8-bit
数(一个字节)DataView.prototype.getUint8()
获取无符号字节DataView.prototype.getInt16() / getUint16() / getInt32() / getUint32() / getFloat32() / getFloat64()
DataView.prototype.setInt8(byteOffset, value)
从DataView起始位置以byte
为计数的指定偏移量(byteOffset
)处储存一个8-bit
数(一个字节)DataView.prototype.setUint8()
无符号字节DataView.prototype.setInt16() / setUint16() / setInt32() / setUint32() / setFloat32() / setFloat64()