首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DataView

DataView视图是一个可以从ArrayBuffer对象中读写多种数值类型的底层接口,在读写时不用考虑平台字节序问题。

语法

代码语言:javascript
复制
new DataView(buffer [, byteOffset [, byteLength]])

参数

buffer一个ArrayBufferSharedArrayBuffer?对象,DataView?对象的数据源。byteOffset可选此 DataView 对象的第一个字节在 buffer中 的偏移。如果不指定则默认从第一个字节开始。byteLength可选此 DataView 对象的字节长度。如果不指定则默认与 buffer 的长度相同。

返回值

一个由 buffer 生成的?DataView?对象。

异常

RangeError如果由偏移(byteOffset)和字节长度(byteLength)计算得到的结束位置超出了 buffer 的长度,抛出此异常。

描述

字节序

需要多个字节来表示的数值,在存储时其字节在内存中的相对顺序依据平台架构的不同而不同,参照Endianness。而使用 DataView 的访问函数时不需要考虑平台架构中所使用的是哪种字节序。

代码语言:javascript
复制
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数(双精度浮点型).

示例

代码语言:javascript
复制
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异常。

代码语言:javascript
复制
var dv = DataView(buffer, 0); 
// TypeError: calling a builtin DataView constructor without new is forbidden
代码语言:javascript
复制
var dv = new DataView(buffer, 0);

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com