非常教程

JavaScript参考手册

数据 | DataView

DataView

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

语法

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

参数

buffer一个ArrayBufferSharedArrayBuffer 对象,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

兼容性说明

从 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);
JavaScript

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络