DataView

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

* 此特性的某些部分可能存在不同级别的支持。

DataView 视图提供了一个底层接口,用于在二进制 ArrayBuffer 中读取和写入多种数字类型,而无需关心平台 字节序

描述

字节序

多字节数字格式在内存中的表示方式因机器架构而异——有关解释,请参阅 字节序DataView 访问器提供了如何访问数据的显式控制,无论执行计算机的字节序如何。例如,WebAssembly 内存始终是小端序,因此你应该使用 DataView 而不是类型化数组来读写多字节值。请参阅 WebAssembly.Memory 了解示例。

js
const littleEndian = (() => {
  const 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()

创建一个新的 DataView 对象。

实例属性

这些属性定义在 DataView.prototype 上,并被所有 DataView 实例共享。

DataView.prototype.buffer

返回 DataView 引用的 ArrayBuffer

DataView.prototype.byteLength

返回 DataView 的长度(以字节为单位)。

DataView.prototype.byteOffset

返回 DataView 相对于其 ArrayBuffer 起始位置的偏移量(以字节为单位)。

DataView.prototype.constructor

创建实例对象的构造函数。对于 DataView 实例,初始值为 DataView 构造函数。

DataView.prototype[Symbol.toStringTag]

[Symbol.toStringTag] 属性的初始值为字符串 "DataView"。该属性用于 Object.prototype.toString()

实例方法

DataView.prototype.getBigInt64()

从此 DataView 的指定字节偏移量开始读取 8 个字节,并将其解释为 64 位有符号整数。

DataView.prototype.getBigUint64()

从此 DataView 的指定字节偏移量开始读取 8 个字节,并将其解释为 64 位无符号整数。

DataView.prototype.getFloat16()

从此 DataView 的指定字节偏移量开始读取 2 个字节,并将其解释为 16 位浮点数。

DataView.prototype.getFloat32()

从此 DataView 的指定字节偏移量开始读取 4 个字节,并将其解释为 32 位浮点数。

DataView.prototype.getFloat64()

从此 DataView 的指定字节偏移量开始读取 8 个字节,并将其解释为 64 位浮点数。

DataView.prototype.getInt16()

从此 DataView 的指定字节偏移量开始读取 2 个字节,并将其解释为 16 位有符号整数。

DataView.prototype.getInt32()

从此 DataView 的指定字节偏移量开始读取 4 个字节,并将其解释为 32 位有符号整数。

DataView.prototype.getInt8()

从此 DataView 的指定字节偏移量读取 1 个字节,并将其解释为 8 位有符号整数。

DataView.prototype.getUint16()

从此 DataView 的指定字节偏移量开始读取 2 个字节,并将其解释为 16 位无符号整数。

DataView.prototype.getUint32()

从此 DataView 的指定字节偏移量开始读取 4 个字节,并将其解释为 32 位无符号整数。

DataView.prototype.getUint8()

从此 DataView 的指定字节偏移量读取 1 个字节,并将其解释为 8 位无符号整数。

DataView.prototype.setBigInt64()

接受一个 BigInt,并将其作为 64 位有符号整数存储在此 DataView 的指定字节偏移量开始的 8 个字节中。

DataView.prototype.setBigUint64()

接受一个 BigInt,并将其作为 64 位无符号整数存储在此 DataView 的指定字节偏移量开始的 8 个字节中。

DataView.prototype.setFloat16()

接受一个数字,并将其作为 16 位浮点数存储在此 DataView 的指定字节偏移量开始的 2 个字节中。

DataView.prototype.setFloat32()

接受一个数字,并将其作为 32 位浮点数存储在此 DataView 的指定字节偏移量开始的 4 个字节中。

DataView.prototype.setFloat64()

接受一个数字,并将其作为 64 位浮点数存储在此 DataView 的指定字节偏移量开始的 8 个字节中。

DataView.prototype.setInt16()

接受一个数字,并将其作为 16 位有符号整数存储在此 DataView 的指定字节偏移量处的 2 个字节中。

DataView.prototype.setInt32()

接受一个数字,并将其作为 32 位有符号整数存储在此 DataView 的指定字节偏移量处的 4 个字节中。

DataView.prototype.setInt8()

接受一个数字,并将其作为 8 位有符号整数存储在此 DataView 的指定字节偏移量处的字节中。

DataView.prototype.setUint16()

接受一个数字,并将其作为 16 位无符号整数存储在此 DataView 的指定字节偏移量处的 2 个字节中。

DataView.prototype.setUint32()

接受一个数字,并将其作为 32 位无符号整数存储在此 DataView 的指定字节偏移量处的 4 个字节中。

DataView.prototype.setUint8()

接受一个数字,并将其作为 8 位无符号整数存储在此 DataView 的指定字节偏移量处的字节中。

示例

使用 DataView

js
const buffer = new ArrayBuffer(16);
const view = new DataView(buffer, 0);

view.setInt16(1, 42);
view.getInt16(1); // 42

规范

规范
ECMAScript® 2026 语言规范
# sec-dataview-objects

浏览器兼容性

另见