DataView
DataView
视图提供了一个低级接口,用于读取和写入二进制ArrayBuffer
中的多种数字类型,而无需关心平台的字节序。
描述
字节序
多字节数字格式在内存中的表示方式取决于机器架构 - 请参阅字节序以获取说明。DataView
访问器提供对数据访问方式的显式控制,而不管执行计算机的字节序如何。例如,WebAssembly 内存始终是小端序,因此您应该使用 DataView
而不是类型化数组来读取和写入多字节值。请参阅WebAssembly.Memory
以获取示例。
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
-
此视图引用的
ArrayBuffer
。在构造时固定,因此为只读。 DataView.prototype.byteLength
-
此视图的长度(以字节为单位)。在构造时固定,因此为只读。
DataView.prototype.byteOffset
-
此视图与其
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
const buffer = new ArrayBuffer(16);
const view = new DataView(buffer, 0);
view.setInt16(1, 42);
view.getInt16(1); // 42
规范
规范 |
---|
ECMAScript 语言规范 # sec-dataview-objects |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。