Вы читаете английскую версию этой статьи, так как пока нет перевода на данный язык. Помогите нам перевести эту статью!
Вид DataView предоставляет низко-уровневый интерфейс для чтения и записи многочисленных числовых типов в бинарном ArrayBuffer, независимо от порядка байтов платформы.
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.
Синтаксис
new DataView(buffer [, byteOffset [, byteLength]])
Параметры
buffer- Существующий
ArrayBufferилиSharedArrayBufferдля использования как хранилище для нового объектаDataView. byteOffsetНеобязательный- Смещение в байтах к первому байту в заданном буфере. Если не определён, то вид буфера будет начинаться с первого байта.
byteLengthНеобязательный- Количество элементов в массиве байтов. Если не определён, то длина вида будет соответствовать длине буфера.
Возвращаемое значение
Новый объект DataView представляющий определённый буфер данных.
Исключения
RangeError- Выкидывается если
byteOffsetиbyteLengthзаходит за пределы буфера.
Описание
Порядок байтов
Многобайтовые числовые форматы представлены в памяти по разному в зависимости от архитектуры машины, см 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
Свойства
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.
Методы
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.
DataView.prototype.getBigInt64()- Gets a signed 64-bit integer (long long) at the specified byte offset from the start of the view.
DataView.prototype.getBigUint64()- Gets an unsigned 64-bit integer (unsigned long long) 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.
DataView.prototype.setBigInt64()- Stores a signed 64-bit integer (long long) value at the specified byte offset from the start of the view.
DataView.prototype.setBigUint64()- Stores an unsigned 64-bit integer (unsigned long long) value at the specified byte offset from the start of the view.
Пример
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 | Устаревшая | Superseded by ECMAScript 6 |
| ECMAScript 2015 (6th Edition, ECMA-262) Определение 'DataView' в этой спецификации. |
Стандарт | Initial definition in an ECMA standard |
| ECMAScript Latest Draft (ECMA-262) Определение 'DataView' в этой спецификации. |
Черновик |
Таблица совместимости
| Компьютеры | Мобильные | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DataView | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
buffer | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
byteLength | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
byteOffset | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
getBigInt64 | Chrome Полная поддержка 67 | Edge Нет поддержки Нет | Firefox Полная поддержка 68 | IE Нет поддержки Нет | Opera Полная поддержка 54 | Safari Нет поддержки Нет | WebView Android Полная поддержка 67 | Chrome Android Полная поддержка 67 | Firefox Android Полная поддержка 68 | Opera Android Полная поддержка 48 | Safari iOS Нет поддержки Нет | Samsung Internet Android Полная поддержка 9.0 | nodejs Полная поддержка 10.4.0 |
getBigUint64 | Chrome Полная поддержка 67 | Edge Нет поддержки Нет | Firefox Полная поддержка 68 | IE Нет поддержки Нет | Opera Полная поддержка 54 | Safari Нет поддержки Нет | WebView Android Полная поддержка 67 | Chrome Android Полная поддержка 67 | Firefox Android Полная поддержка 68 | Opera Android Полная поддержка 48 | Safari iOS Нет поддержки Нет | Samsung Internet Android Полная поддержка 9.0 | nodejs Полная поддержка 10.4.0 |
getFloat32 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
getFloat64 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
getInt16 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
getInt32 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
getInt8 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
getUint16 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
getUint32 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
getUint8 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
DataView() without new throws | Chrome Полная поддержка 11 | Edge Полная поддержка 13 | Firefox Полная поддержка 40 | IE Нет поддержки Нет | Opera Полная поддержка Да | Safari ? | WebView Android Полная поддержка ≤37 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 40 | Opera Android Полная поддержка Да | Safari iOS ? | Samsung Internet Android Полная поддержка 1.0 | nodejs Полная поддержка 0.12 |
prototype | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
setBigInt64 | Chrome Полная поддержка 67 | Edge Нет поддержки Нет | Firefox Полная поддержка 68 | IE Нет поддержки Нет | Opera Полная поддержка 54 | Safari Нет поддержки Нет | WebView Android Полная поддержка 67 | Chrome Android Полная поддержка 67 | Firefox Android Полная поддержка 68 | Opera Android Полная поддержка 48 | Safari iOS Нет поддержки Нет | Samsung Internet Android Полная поддержка 9.0 | nodejs Полная поддержка 10.4.0 |
setBigUint64 | Chrome Полная поддержка 67 | Edge Нет поддержки Нет | Firefox Полная поддержка 68 | IE Нет поддержки Нет | Opera Полная поддержка 54 | Safari Нет поддержки Нет | WebView Android Полная поддержка 67 | Chrome Android Полная поддержка 67 | Firefox Android Полная поддержка 68 | Opera Android Полная поддержка 48 | Safari iOS Нет поддержки Нет | Samsung Internet Android Полная поддержка 9.0 | nodejs Полная поддержка 10.4.0 |
setFloat32 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
setFloat64 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
setInt16 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
setInt32 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
setInt8 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
setUint16 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
setUint32 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
setUint8 | Chrome Полная поддержка 9 | Edge Полная поддержка 12 | Firefox Полная поддержка 15 | IE Полная поддержка 10 | Opera Полная поддержка 12.1 | Safari Полная поддержка 5.1 | WebView Android Полная поддержка 4 | Chrome Android Полная поддержка 18 | Firefox Android Полная поддержка 15 | Opera Android Полная поддержка 12.1 | Safari iOS Полная поддержка 4.2 | Samsung Internet Android Полная поддержка Да | nodejs Полная поддержка Да |
SharedArrayBuffer accepted as buffer | Chrome Полная поддержка 60 | Edge Нет поддержки Нет | Firefox Полная поддержка 55 | IE Нет поддержки Нет | Opera Полная поддержка 47 | Safari ? | WebView Android Полная поддержка 60 | Chrome Android Полная поддержка 60 | Firefox Android Полная поддержка 55 | Opera Android ? | Safari iOS ? | Samsung Internet Android Полная поддержка 8.0 | nodejs ? |
Легенда
- Полная поддержка
- Полная поддержка
- Нет поддержки
- Нет поддержки
- Совместимость неизвестна
- Совместимость неизвестна
Замечания совместимости
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);
Также
- jDataView: JavaScript library that polyfills and extends the
DataViewAPI to all browsers and Node.js. ArrayBufferSharedArrayBuffer