Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Эта страница была переведена с английского языка силами сообщества. Вы тоже можете внести свой вклад, присоединившись к русскоязычному сообществу MDN Web Docs.

DataView

BaselineWidely available *

Представление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