DataView
DataView
DataView
视图是一个可以从ArrayBuffer
对象中读写多种数值类型的底层接口,在读写时不用考虑平台字节序问题。
语法
new DataView(buffer [, byteOffset [, byteLength]])
参数
buffer
一个ArrayBuffer
或SharedArrayBuffer
对象,DataView 对象的数据源。byteOffset
可选此 DataView 对象的第一个字节在 buffer
中 的偏移。如果不指定则默认从第一个字节开始。byteLength
可选此 DataView 对象的字节长度。如果不指定则默认与 buffer
的长度相同。
返回值
一个由 buffer 生成的 DataView 对象。
异常
RangeError
如果由偏移(byteOffset)和字节长度(byteLength)计算得到的结束位置超出了 buffer 的长度,抛出此异常。
描述
字节序
需要多个字节来表示的数值,在存储时其字节在内存中的相对顺序依据平台架构的不同而不同,参照Endianness。而使用 DataView 的访问函数时不需要考虑平台架构中所使用的是哪种字节序。
var littleEndian = (function() {
var buffer = new ArrayBuffer(2
new DataView(buffer).setInt16(0, 256, true /* littleEndian */
// Int16Array uses the platform's endianness.
return new Int16Array(buffer)[0] === 256;
})(
console.log(littleEndian // true or false
属性
所有 DataView 实例都继承自 DataView.prototype,我们也可以向 DataView 对象中添加其他属性。
DataView.prototype.constructor
指定用来生成原型的构造函数.初始化值是标准内置DataView构造器.
方法
读
DataView.prototype.getInt8()从DataView
起始位置以byte为计数的指定偏移量(byteOffset)处获取一个8-bit数(一个字节).
写
DataView.prototype.setInt8()从DataView
起始位置以byte为计数的指定偏移量(byteOffset)处储存一个8-bit数(一个字节).
示例
var buffer = new ArrayBuffer(16
var dv = new DataView(buffer, 0
dv.setInt16(1, 42
dv.getInt16(1 //42
规范
Specification | Status | Comment |
---|---|---|
Typed Array Specification | Obsolete | Superseded by ECMAScript 6 |
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'DataView' in that specification. | Standard | Initial definition in an ECMA standard |
ECMAScript Latest Draft (ECMA-262)The definition of 'DataView' in that specification. | Draft | |
浏览器兼容性
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 9.0 | (Yes) | 15.0 (15.0) | 10 | 12.1 | 5.1 |
SharedArrayBuffer | No support | No support | 53 (53) 1 | No support | No support | No support |
Feature | Android | Chrome for Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | 4.0 | (Yes) | (Yes) | 15.0 (15) | ? | 12.0 | 4.2 |
SharedArrayBuffer | No support | No support | No support | 53 (53) 1 | No support | No support | No support |
兼容性说明
从 FireFox 40 开始, DataView 需要通过 new
操作符来构造。如果不使用 new
而是直接将 DataView()
作为函数调用的话会抛出 TypeError
异常。
var dv = DataView(buffer, 0
// TypeError: calling a builtin DataView constructor without new is forbidden
var dv = new DataView(buffer, 0