The DataView view provides a low-level interface for reading and writing multiple number types in an ArrayBuffer irrespective of the platform's endianness.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Syntax
new DataView(buffer [, byteOffset [, byteLength]])
Parameters
buffer- An existing
ArrayBufferorSharedArrayBufferto use as the storage for the newDataViewobject. byteOffsetOptional- The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the view of the buffer will start with the first byte.
byteLengthOptional- The number of elements in the byte array. If unspecified, length of the view will match the buffer's length.
Return value
A new DataView object representing the specified data buffer.
Exceptions
RangeError- Thrown if the
byteOffsetandbyteLengthresult in the specified view extending past the end of the buffer.
Description
Endianness
Multi-byte number formats are represented in memory differently depending on machine architecture, see Endianness for an explanation. DataView accessors provide explicit control of how data will be accessed irrespective of the platform architecture's endianness.
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
Properties
All DataView instances inherit from DataView.prototype and allows the addition of properties to all DataView objects.
DataView.prototype.constructor- Specifies the function that creates an object's prototype. The initial value is the standard built-in
DataViewconstructor. DataView.prototype.bufferRead only- The
ArrayBufferreferenced by this view. Fixed at construction time and thus read only. DataView.prototype.byteLengthRead only- The length (in bytes) of this view from the start of its
ArrayBuffer. Fixed at construction time and thus read only. DataView.prototype.byteOffsetRead only- The offset (in bytes) of this view from the start of its
ArrayBuffer. Fixed at construction time and thus read only.
Methods
Read
DataView.prototype.getInt8()- Gets a signed 8-bit integer (byte) at the specified byte offset from the start of the view.
DataView.prototype.getUint8()- Gets an unsigned 8-bit integer (unsigned byte) at the specified byte offset from the start of the view.
DataView.prototype.getInt16()- Gets a signed 16-bit integer (short) at the specified byte offset from the start of the view.
DataView.prototype.getUint16()- Gets an unsigned 16-bit integer (unsigned short) at the specified byte offset from the start of the view.
DataView.prototype.getInt32()- Gets a signed 32-bit integer (long) at the specified byte offset from the start of the view.
DataView.prototype.getUint32()- Gets an unsigned 32-bit integer (unsigned long) at the specified byte offset from the start of the view.
DataView.prototype.getFloat32()- Gets a signed 32-bit float (float) at the specified byte offset from the start of the view.
DataView.prototype.getFloat64()- Gets a signed 64-bit float (double) at the specified byte offset from the start of the view.
Write
DataView.prototype.setInt8()- Stores a signed 8-bit integer (byte) value at the specified byte offset from the start of the view.
DataView.prototype.setUint8()- Stores an unsigned 8-bit integer (unsigned byte) value at the specified byte offset from the start of the view.
DataView.prototype.setInt16()- Stores a signed 16-bit integer (short) value at the specified byte offset from the start of the view.
DataView.prototype.setUint16()- Stores an unsigned 16-bit integer (unsigned short) value at the specified byte offset from the start of the view.
DataView.prototype.setInt32()- Stores a signed 32-bit integer (long) value at the specified byte offset from the start of the view.
DataView.prototype.setUint32()- Stores an unsigned 32-bit integer (unsigned long) value at the specified byte offset from the start of the view.
DataView.prototype.setFloat32()- Stores a signed 32-bit float (float) value at the specified byte offset from the start of the view.
DataView.prototype.setFloat64()- Stores a signed 64-bit float (double) value at the specified byte offset from the start of the view.
Example
var buffer = new ArrayBuffer(16); var dv = new DataView(buffer, 0); dv.setInt16(1, 42); dv.getInt16(1); //42
Specifications
| 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 |
Browser compatibility
| Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| Basic support | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
DataView() without new throws | Yes | Yes | 40 | No | Yes | ? |
SharedArrayBuffer accepted as buffer | 60 | ? | 55 | ? | ? | ? |
buffer | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
byteLength | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
byteOffset | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
getFloat32 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
getFloat64 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
getInt16 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
getInt32 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
getInt8 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
getUint16 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
getUint32 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
getUint8 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
setFloat32 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
setFloat64 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
setInt16 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
setInt32 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
setInt8 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
setUint16 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
setUint32 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
setUint8 | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
prototype | 9 | 12 | 15 | 10 | 12.1 | 5.1 |
| Feature | Android webview | Chrome for Android | Edge mobile | Firefox for Android | Opera Android | iOS Safari | Samsung Internet |
|---|---|---|---|---|---|---|---|
| Basic support | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
DataView() without new throws | ? | ? | ? | 40 | ? | ? | ? |
SharedArrayBuffer accepted as buffer | ? | ? | ? | 55 | ? | ? | ? |
buffer | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
byteLength | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
byteOffset | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
getFloat32 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
getFloat64 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
getInt16 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
getInt32 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
getInt8 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
getUint16 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
getUint32 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
getUint8 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
setFloat32 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
setFloat64 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
setInt16 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
setInt32 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
setInt8 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
setUint16 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
setUint32 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
setUint8 | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
prototype | 4 | Yes | Yes | 15 | 12 | 4.2 | Yes |
Compatibility notes
Starting with Firefox 40, DataView requires to be constructed with a new operator. Calling DataView() as a function without new, will throw a TypeError from now on.
var dv = DataView(buffer, 0); // TypeError: calling a builtin DataView constructor without new is forbidden
var dv = new DataView(buffer, 0);
See also
- jDataView: JavaScript library that polyfills and extends the
DataViewAPI to all browsers and Node.js. ArrayBufferSharedArrayBuffer