File size: 6,767 Bytes
780c9fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
---
title: DataView
slug: Web/JavaScript/Reference/Global_Objects/DataView
page-type: javascript-class
browser-compat: javascript.builtins.DataView
sidebar: jsref
---

The **`DataView`** view provides a low-level interface for reading and writing multiple number types in a binary {{jsxref("ArrayBuffer")}}, without having to care about the platform's [endianness](/en-US/docs/Glossary/Endianness).

## Description

### Endianness

Multi-byte number formats are represented in memory differently depending on machine architecture — see [Endianness](/en-US/docs/Glossary/Endianness) for an explanation. `DataView` accessors provide explicit control of how data is accessed, regardless of the executing computer's endianness. For example, [WebAssembly](/en-US/docs/WebAssembly) memory is always little-endian, so you should use `DataView` instead of typed arrays to read and write multi-byte values. See [`WebAssembly.Memory`](/en-US/docs/WebAssembly/Reference/JavaScript_interface/Memory) for an example.

```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
```

> [!NOTE]
> `DataView` defaults to big-endian read and write, but most platforms use little-endian.

## Constructor

- {{jsxref("DataView/DataView", "DataView()")}}
  - : Creates a new `DataView` object.

## Instance properties

These properties are defined on `DataView.prototype` and shared by all `DataView` instances.

- {{jsxref("DataView.prototype.buffer")}}
  - : Returns the {{jsxref("ArrayBuffer")}} referenced by the `DataView`.
- {{jsxref("DataView.prototype.byteLength")}}
  - : Returns the length (in bytes) of the `DataView`.
- {{jsxref("DataView.prototype.byteOffset")}}
  - : Returns the offset (in bytes) of the `DataView` from the start of its {{jsxref("ArrayBuffer")}}.
- {{jsxref("Object/constructor", "DataView.prototype.constructor")}}
  - : The constructor function that created the instance object. For `DataView` instances, the initial value is the {{jsxref("DataView/DataView", "DataView")}} constructor.
- `DataView.prototype[Symbol.toStringTag]`
  - : The initial value of the [`[Symbol.toStringTag]`](/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) property is the string `"DataView"`. This property is used in {{jsxref("Object.prototype.toString()")}}.

## Instance methods

- {{jsxref("DataView.prototype.getBigInt64()")}}
  - : Reads 8 bytes starting at the specified byte offset of this `DataView` and interprets them as a 64-bit signed integer.
- {{jsxref("DataView.prototype.getBigUint64()")}}
  - : Reads 8 bytes starting at the specified byte offset of this `DataView` and interprets them as a 64-bit unsigned integer.
- {{jsxref("DataView.prototype.getFloat16()")}}
  - : Reads 2 bytes starting at the specified byte offset of this `DataView` and interprets them as a 16-bit floating point number.
- {{jsxref("DataView.prototype.getFloat32()")}}
  - : Reads 4 bytes starting at the specified byte offset of this `DataView` and interprets them as a 32-bit floating point number.
- {{jsxref("DataView.prototype.getFloat64()")}}
  - : Reads 8 bytes starting at the specified byte offset of this `DataView` and interprets them as a 64-bit floating point number.
- {{jsxref("DataView.prototype.getInt16()")}}
  - : Reads 2 bytes starting at the specified byte offset of this `DataView` and interprets them as a 16-bit signed integer.
- {{jsxref("DataView.prototype.getInt32()")}}
  - : Reads 4 bytes starting at the specified byte offset of this `DataView` and interprets them as a 32-bit signed integer.
- {{jsxref("DataView.prototype.getInt8()")}}
  - : Reads 1 byte at the specified byte offset of this `DataView` and interprets it as an 8-bit signed integer.
- {{jsxref("DataView.prototype.getUint16()")}}
  - : Reads 2 bytes starting at the specified byte offset of this `DataView` and interprets them as a 16-bit unsigned integer.
- {{jsxref("DataView.prototype.getUint32()")}}
  - : Reads 4 bytes starting at the specified byte offset of this `DataView` and interprets them as a 32-bit unsigned integer.
- {{jsxref("DataView.prototype.getUint8()")}}
  - : Reads 1 byte at the specified byte offset of this `DataView` and interprets it as an 8-bit unsigned integer.
- {{jsxref("DataView.prototype.setBigInt64()")}}
  - : Takes a BigInt and stores it as a 64-bit signed integer in the 8 bytes starting at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setBigUint64()")}}
  - : Takes a BigInt and stores it as a 64-bit unsigned integer in the 8 bytes starting at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setFloat16()")}}
  - : Takes a number and stores it as a 16-bit float in the 2 bytes starting at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setFloat32()")}}
  - : Takes a number and stores it as a 32-bit float in the 4 bytes starting at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setFloat64()")}}
  - : Takes a number and stores it as a 64-bit float in the 8 bytes starting at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setInt16()")}}
  - : Takes a number and stores it as a 16-bit signed integer in the 2 bytes at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setInt32()")}}
  - : Takes a number and stores it as a 32-bit signed integer in the 4 bytes at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setInt8()")}}
  - : Takes a number and stores it as an 8-bit signed integer in the byte at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setUint16()")}}
  - : Takes a number and stores it as a 16-bit unsigned integer in the 2 bytes at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setUint32()")}}
  - : Takes a number and stores it as a 32-bit unsigned integer in the 4 bytes at the specified byte offset of this `DataView`.
- {{jsxref("DataView.prototype.setUint8()")}}
  - : Takes a number and stores it as an 8-bit unsigned integer in the byte at the specified byte offset of this `DataView`.

## Examples

### Using DataView

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

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

## Specifications

{{Specifications}}

## Browser compatibility

{{Compat}}

## See also

- [Polyfill of `DataView` in `core-js`](https://github.com/zloirock/core-js#ecmascript-typed-arrays)
- {{jsxref("ArrayBuffer")}}
- {{jsxref("SharedArrayBuffer")}}