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.buffer只读被视图引入的ArrayBuffer.创建实例的时候已固化因此是只读的.
DataView.prototype.byteLength只读从ArrayBuffer中读取的字节长度. 创建实例的时候已固化因此是只读的.
DataView.prototype.byteOffset只读从ArrayBuffer读取时的偏移字节长度. 创建实例的时候已固化因此是只读的.
方法
读
DataView.prototype.getInt8()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处获取一个8-bit数(一个字节).
DataView.prototype.getUint8()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处获取一个8-bit数(无符号字节).
DataView.prototype.getInt16()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处获取一个16-bit数(短整型).
DataView.prototype.getUint16()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处获取一个16-bit数(无符号短整型).
DataView.prototype.getInt32()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处获取一个32-bit数(长整型).
DataView.prototype.getUint32()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处获取一个32-bit数(无符号长整型).
DataView.prototype.getFloat32()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处获取一个32-bit数(浮点型).
DataView.prototype.getFloat64()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处获取一个64-bit数(双精度浮点型).
写
DataView.prototype.setInt8()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处储存一个8-bit数(一个字节).
DataView.prototype.setUint8()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处储存一个8-bit数(无符号字节).
DataView.prototype.setInt16()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处储存一个16-bit数(短整型).
DataView.prototype.setUint16()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处储存一个16-bit数(无符号短整型).
DataView.prototype.setInt32()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处储存一个32-bit数(长整型).
DataView.prototype.setUint32()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处储存一个32-bit数(无符号长整型).
DataView.prototype.setFloat32()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处储存一个32-bit数(浮点型).
DataView.prototype.setFloat64()从DataView起始位置以byte为计数的指定偏移量(byteOffset)处储存一个64-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 |
兼容性说明
var dv = DataView(buffer, 0);
// TypeError: calling a builtin DataView constructor without new is forbiddenvar dv = new DataView(buffer, 0);本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

