Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Стандартные встроенные объекты
  5. DataView

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

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, независимо отпорядка байтов платформы.

Описание

Порядок байтов

Многобайтовые числовые форматы представляются в памяти по-разному в зависимости от архитектуры машины (смотритеEndianness для объяснения). Методы доступаDataView предоставляют явный способ обращения к данным вне зависимости от порядка байтов платформы.

js
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 или false

64-битные целые числа

Некоторые браузеры не поддерживаютDataView.prototype.setBigInt64() иDataView.prototype.setBigUint64(). Поэтому для использования 64-битных операций, которые будут работать в любом браузере, можно реализовать собственную функциюgetUint64() для получения значений с точностью доNumber.MAX_SAFE_INTEGER, чего достаточно в большинстве случаев.

js
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.

js
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.buffer

ArrayBuffer, связанный с представлением. Устанавливается в момент создания идоступно только для чтения.

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

js
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

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp