DataView

DataView视图提供了一个与平台中字节在内存中的排列顺序(字节序)无关的从ArrayBuffer读写多数字类型的底层接口.

语法

new DataView(buffer [, byteOffset [, byteLength]])

参数

buffer
一个现有的ArrayBuffer,用 作DataView 实例的存储空间.
byteOffset 可选
视图实例引用的buffer的字节偏移量.如果没有指定,buffer视图会以首字节作为开始。
byteLength 可选
字节数组中元素的个数。如果未指定,视图的长度将会以buffer的长度匹配。

返回值

一个表示指定data buffer的DataView实例

抛出错误

RangeError
如果 byteOffsetbyteLength 导致指定视图对应的 buffer 访问越界,则会抛出此错误.

描述

字节顺序

多字节数字在内存中的解释会根据系统架构表现出不同的格式,进一步解释参照Endianness。DataView的访问函数提供一个不需要考虑平台架构字节顺序的简单访问控制。

var littleEndian = (function() {
  var buffer = new ArrayBuffer(2);
  new DataView(buffer).setInt16(0, 256, true /* littleEndian */);
  // Int16Array 使用系统自带的字节顺序
  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

规范

规范名称 状态 注释
Typed Array Specification Obsolete 被 ECMAScript 6 取代
ECMAScript 2015 (6th Edition, ECMA-262)
DataView
Standard Initial definition in an ECMA standard.
ECMAScript Latest Draft (ECMA-262)
DataView
Draft  

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本支持 9.0 15.0 (15.0) 10 12.1 5.1
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本支持 4.0 (Yes) 15.0 (15) ? 12.0 4.2

Firefox-specific notes

从 Gecko / SpiderMonkey 40 (Firefox 40 / Thunderbird 40 / SeaMonkey 2.37) 开始, DataView 要求使用 new 操作符构造。 仅调用 DataView() 而不使用 new 操作符将会抛出一个 TypeError

var dv = DataView(buffer, 0);
// TypeError: calling a builtin DataView constructor without new is forbidden
var dv = new DataView(buffer, 0);

相关链接

  • jDataView: 用于扩展 DataView API 并能适配所有浏览器和 Node.js.

文档标签和贡献者