This page was translated from English by the community.Learn more and join the MDN Web Docs community.
DataView
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
* Some parts of this feature may have varying levels of support.
ПредставлениеDataView предоставляет низко-уровневый интерфейс для чтения и записи различных числовых типов в бинарномArrayBuffer, независимо отпорядка байтов платформы.
In this article
Описание
>Порядок байтов
Многобайтовые числовые форматы представляются в памяти по-разному в зависимости от архитектуры машины (смотритеEndianness для объяснения). Методы доступаDataView предоставляют явный способ обращения к данным вне зависимости от порядка байтов платформы.
const littleEndian = (() => { const buffer = new ArrayBuffer(2); new DataView(buffer).setInt16(0, 256, true /* littleEndian */); // Int16Array использует порядок байтов платформы. return new Int16Array(buffer)[0] === 256;})();console.log(littleEndian); // true или false64-битные целые числа
Некоторые браузеры не поддерживаютDataView.prototype.setBigInt64() иDataView.prototype.setBigUint64(). Поэтому для использования 64-битных операций, которые будут работать в любом браузере, можно реализовать собственную функциюgetUint64() для получения значений с точностью доNumber.MAX_SAFE_INTEGER, чего достаточно в большинстве случаев.
function getUint64(dataview, byteOffset, littleEndian) { // разбиваем 64-битное число на две 32-битных (по 4 байта) части const left = dataview.getUint32(byteOffset, littleEndian); const right = dataview.getUint32(byteOffset + 4, littleEndian); // объединяем два 32-битных значения const combined = littleEndian ? left + 2 ** 32 * right : 2 ** 32 * left + right; if (!Number.isSafeInteger(combined)) console.warn( combined, "превышает MAX_SAFE_INTEGER. Точность может быть потеряна", ); return combined;}В случае если вам всё же нужен полный 64-битный диапазон, можно создатьBigInt. Хотя работа со встроенными значениями BigInt намного быстрее, чем с эквивалентами из самостоятельных реализаций, использование значений BigInt всегда будет намного медленнее, чем 32-битных целых чисел, из-за характера их переменного размера в JavaScript.
const BigInt = window.BigInt, bigThirtyTwo = BigInt(32), bigZero = BigInt(0);function getUint64BigInt(dataview, byteOffset, littleEndian) { // разбиваем 64-битное число на две 32-битных (по 4 байта) части const left = BigInt(dataview.getUint32(byteOffset | 0, !!littleEndian) >>> 0); const right = BigInt( dataview.getUint32(((byteOffset | 0) + 4) | 0, !!littleEndian) >>> 0, ); // объединяем два 32-битных значения и возвращаем return littleEndian ? (right << bigThirtyTwo) | left : (left << bigThirtyTwo) | right;}Конструктор
DataView()Создаёт новый объект
DataView.
Свойства экземпляра
Эти свойства определены вDataView.prototype и есть у всех экземпляровDataView.
DataView.prototype.bufferArrayBuffer, связанный с представлением. Устанавливается в момент создания идоступно только для чтения.DataView.prototype.byteLengthРазмер представления в байтах. Устанавливается в момент создания идоступно только для чтения.
DataView.prototype.byteOffsetСмещение представления в байтах от начала его
ArrayBuffer. Устанавливается в момент создания идоступно только для чтения.DataView.prototype.constructorФункция-конструктор, создающая экземпляр объекта. Для экземпляров
DataViewначальным значением является конструкторDataView.DataView.prototype[@@toStringTag]Начальным значением свойства
@@toStringTagявляется строка"DataView". Это свойство используется вObject.prototype.toString().
Методы экземпляра
DataView.prototype.getBigInt64()Читает 8 байтов начиная с указанного смещения этого
DataViewи интерпретирует их как 64-битное знаковое целое число.DataView.prototype.getBigUint64()Читает 8 байтов начиная с указанного смещения этого
DataViewи интерпретирует их как 64-битное беззнаковое целое число.DataView.prototype.getFloat32()Читает 4 байта начиная с указанного смещения этого
DataViewи интерпретирует их как 32-битное число с плавающей точкой.DataView.prototype.getFloat64()Читает 8 байтов начиная с указанного смещения этого
DataViewи интерпретирует их как 64-битное число с плавающей точкой.DataView.prototype.getInt16()Читает 2 байта начиная с указанного смещения этого
DataViewи интерпретирует их как 16-битное знаковое целое число.DataView.prototype.getInt32()Читает 4 байта начиная с указанного смещения этого
DataViewи интерпретирует их как 32-битное знаковое целое число.DataView.prototype.getInt8()Читает 1 байт начиная с указанного смещения этого
DataViewи интерпретирует его как 8-битное знаковое целое число.DataView.prototype.getUint16()Читает 2 байта начиная с указанного смещения этого
DataViewи интерпретирует их как 16-битное беззнаковое целое число.DataView.prototype.getUint32()Читает 4 байта начиная с указанного смещения этого
DataViewи интерпретирует их как 32-битное беззнаковое целое число.DataView.prototype.getUint8()Читает 1 байт начиная с указанного смещения этого
DataViewи интерпретирует его как 8-битное беззнаковое целое число.DataView.prototype.setBigInt64()Принимает BigInt и сохраняет его как 64-битное знаковое целое число в 8 байтах начиная с указанного смещения этого
DataView.DataView.prototype.setBigUint64()Принимает BigInt и сохраняет его как 64-битное беззнаковое целое число в 8 байтах начиная с указанного смещения этого
DataView.DataView.prototype.setFloat32()Принимает число и сохраняет его как 32-битное число с плавающей точкой в 4 байтах начиная с указанного смещения этого
DataView.DataView.prototype.setFloat64()Принимает число и сохраняет его как 64-битное число с плавающей точкой в 8 байтах начиная с указанного смещения этого
DataView.DataView.prototype.setInt16()Принимает число и сохраняет его как 16-битное знаковое целое число в 2 байтах по указанному смещению этого
DataView.DataView.prototype.setInt32()Принимает число и сохраняет его как 32-битное знаковое целое число в 4 байтах по указанному смещению этого
DataView.DataView.prototype.setInt8()Принимает число и сохраняет его как 8-битное знаковое целое число в байте по указанному смещению этого
DataView.DataView.prototype.setUint16()Принимает число и сохраняет его как 16-битное беззнаковое целое число в 2 байтах по указанному смещению этого
DataView.DataView.prototype.setUint32()Принимает число и сохраняет его как 32-битное беззнаковое целое число в 4 байтах по указанному смещению этого
DataView.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Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-dataview-objects> |