-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ru] update
Web/JavaScript/Reference/Global_Objects/DataView
transl…
…ation (#17552) [ru] update 'Web/JavaScript/Reference/Global_Objects/DataView' translation
- Loading branch information
Showing
1 changed file
with
124 additions
and
59 deletions.
There are no files selected for viewing
183 changes: 124 additions & 59 deletions
183
files/ru/web/javascript/reference/global_objects/dataview/index.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,97 +1,162 @@ | ||
--- | ||
title: DataView | ||
slug: Web/JavaScript/Reference/Global_Objects/DataView | ||
l10n: | ||
sourceCommit: 70f09675ddcfc75a3bb66d2dce4cf82738948a37 | ||
--- | ||
|
||
{{JSRef}} | ||
|
||
Вид **`DataView`** предоставляет низко-уровневый интерфейс для чтения и записи многочисленных числовых типов в бинарном {{jsxref("ArrayBuffer")}}, независимо от порядка байтов платформы. | ||
|
||
{{EmbedInteractiveExample("pages/js/dataview-constructor.html")}} | ||
|
||
## Синтаксис | ||
|
||
``` | ||
new DataView(buffer [, byteOffset [, byteLength]]) | ||
``` | ||
|
||
### Параметры | ||
|
||
- `buffer` | ||
- : Существующий {{jsxref("ArrayBuffer")}} или {{jsxref("SharedArrayBuffer")}} {{experimental_inline}} для использования как хранилище для нового объекта `DataView`. | ||
- `byteOffset` {{optional_inline}} | ||
- : Смещение в байтах к первому байту в заданном буфере. Если не определён, то вид буфера будет начинаться с первого байта. | ||
- `byteLength` {{optional_inline}} | ||
- : Количество элементов в массиве байтов. Если не определён, то длина вида будет соответствовать длине буфера. | ||
|
||
### Возвращаемое значение | ||
|
||
Новый объект `DataView` представляющий определённый буфер данных. | ||
|
||
### Исключения | ||
|
||
- `{{jsxref("RangeError")}}` | ||
- : Выкидывается если `byteOffset` и `byteLength` заходит за пределы буфера. | ||
Представление **`DataView`** предоставляет низко-уровневый интерфейс для чтения и записи различных числовых типов в бинарном {{jsxref("ArrayBuffer")}}, независимо от [порядка байтов](/ru/docs/Glossary/Endianness) платформы. | ||
|
||
## Описание | ||
|
||
### Порядок байтов | ||
|
||
Многобайтовые числовые форматы представлены в памяти по разному в зависимости от архитектуры машины, см {{Glossary("Endianness")}} для объяснения. Аксессоры DataView предоставляют явный контроль над обращением к данным вне зависимости от порядка байтов архитектуры платформы. | ||
Многобайтовые числовые форматы представляются в памяти по-разному в зависимости от архитектуры машины (смотрите {{Glossary("Endianness")}} для объяснения). Методы доступа `DataView` предоставляют явный способ обращения к данным вне зависимости от порядка байтов платформы. | ||
|
||
```js | ||
var littleEndian = (function () { | ||
var buffer = new ArrayBuffer(2); | ||
const littleEndian = (() => { | ||
const buffer = new ArrayBuffer(2); | ||
new DataView(buffer).setInt16(0, 256, true /* littleEndian */); | ||
// Int16Array uses the platform's endianness. | ||
|
||
// Int16Array использует порядок байтов платформы. | ||
return new Int16Array(buffer)[0] === 256; | ||
})(); | ||
console.log(littleEndian); // true or false | ||
|
||
console.log(littleEndian); // true или false | ||
``` | ||
|
||
## Свойства | ||
### 64-битные целые числа | ||
|
||
All `DataView` instances inherit from {{jsxref("DataView.prototype")}} and allows the addition of properties to all DataView objects. | ||
Некоторые браузеры не поддерживают {{jsxref("DataView.prototype.setBigInt64()")}} и {{jsxref("DataView.prototype.setBigUint64()")}}. Поэтому для использования 64-битных операций, которые будут работать в любом браузере, можно реализовать собственную функцию `getUint64()` для получения значений с точностью до {{jsxref("Number.MAX_SAFE_INTEGER")}}, чего достаточно в большинстве случаев. | ||
|
||
{{page('en-US/Web/JavaScript/Reference/Global_Objects/DataView/prototype','Properties')}} | ||
```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-битный диапазон, можно создать {{jsxref("BigInt")}}. Хотя работа со встроенными значениями BigInt намного быстрее, чем с эквивалентами из самостоятельных реализаций, использование значений BigInt всегда будет намного медленнее, чем 32-битных целых чисел, из-за характера их переменного размера в JavaScript. | ||
|
||
{{page('en-US/Web/JavaScript/Reference/Global_Objects/DataView/prototype','Methods')}} | ||
```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; | ||
} | ||
``` | ||
|
||
## Пример | ||
## Конструктор | ||
|
||
- {{jsxref("DataView/DataView", "DataView()")}} | ||
- : Создаёт новый объект `DataView`. | ||
|
||
## Свойства экземпляра | ||
|
||
Эти свойства определены в `DataView.prototype` и есть у всех экземпляров `DataView`. | ||
|
||
- {{jsxref("DataView.prototype.buffer")}} | ||
- : {{jsxref("ArrayBuffer")}}, связанный с представлением. Устанавливается в момент создания и **доступно только для чтения**. | ||
- {{jsxref("DataView.prototype.byteLength")}} | ||
- : Размер представления в байтах. Устанавливается в момент создания и **доступно только для чтения**. | ||
- {{jsxref("DataView.prototype.byteOffset")}} | ||
- : Смещение представления в байтах от начала его {{jsxref("ArrayBuffer")}}. Устанавливается в момент создания и **доступно только для чтения**. | ||
- {{jsxref("Object/constructor", "DataView.prototype.constructor")}} | ||
- : Функция-конструктор, создающая экземпляр объекта. Для экземпляров `DataView` начальным значением является конструктор {{jsxref("DataView/DataView", "DataView")}}. | ||
- `DataView.prototype[@@toStringTag]` | ||
- : Начальным значением свойства [`@@toStringTag`](/ru/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag) является строка `"DataView"`. Это свойство используется в {{jsxref("Object.prototype.toString()")}}. | ||
|
||
## Методы экземпляра | ||
|
||
- {{jsxref("DataView.prototype.getBigInt64()")}} | ||
- : Читает 8 байтов начиная с указанного смещения этого `DataView` и интерпретирует их как 64-битное знаковое целое число. | ||
- {{jsxref("DataView.prototype.getBigUint64()")}} | ||
- : Читает 8 байтов начиная с указанного смещения этого `DataView` и интерпретирует их как 64-битное беззнаковое целое число. | ||
- {{jsxref("DataView.prototype.getFloat32()")}} | ||
- : Читает 4 байта начиная с указанного смещения этого `DataView` и интерпретирует их как 32-битное число с плавающей точкой. | ||
- {{jsxref("DataView.prototype.getFloat64()")}} | ||
- : Читает 8 байтов начиная с указанного смещения этого `DataView` и интерпретирует их как 64-битное число с плавающей точкой. | ||
- {{jsxref("DataView.prototype.getInt16()")}} | ||
- : Читает 2 байта начиная с указанного смещения этого `DataView` и интерпретирует их как 16-битное знаковое целое число. | ||
- {{jsxref("DataView.prototype.getInt32()")}} | ||
- : Читает 4 байта начиная с указанного смещения этого `DataView` и интерпретирует их как 32-битное знаковое целое число. | ||
- {{jsxref("DataView.prototype.getInt8()")}} | ||
- : Читает 1 байт начиная с указанного смещения этого `DataView` и интерпретирует его как 8-битное знаковое целое число. | ||
- {{jsxref("DataView.prototype.getUint16()")}} | ||
- : Читает 2 байта начиная с указанного смещения этого `DataView` и интерпретирует их как 16-битное беззнаковое целое число. | ||
- {{jsxref("DataView.prototype.getUint32()")}} | ||
- : Читает 4 байта начиная с указанного смещения этого `DataView` и интерпретирует их как 32-битное беззнаковое целое число. | ||
- {{jsxref("DataView.prototype.getUint8()")}} | ||
- : Читает 1 байт начиная с указанного смещения этого `DataView` и интерпретирует его как 8-битное беззнаковое целое число. | ||
- {{jsxref("DataView.prototype.setBigInt64()")}} | ||
- : Принимает BigInt и сохраняет его как 64-битное знаковое целое число в 8 байтах начиная с указанного смещения этого `DataView`. | ||
- {{jsxref("DataView.prototype.setBigUint64()")}} | ||
- : Принимает BigInt и сохраняет его как 64-битное беззнаковое целое число в 8 байтах начиная с указанного смещения этого `DataView`. | ||
- {{jsxref("DataView.prototype.setFloat32()")}} | ||
- : Принимает число и сохраняет его как 32-битное число с плавающей точкой в 4 байтах начиная с указанного смещения этого `DataView`. | ||
- {{jsxref("DataView.prototype.setFloat64()")}} | ||
- : Принимает число и сохраняет его как 64-битное число с плавающей точкой в 8 байтах начиная с указанного смещения этого `DataView`. | ||
- {{jsxref("DataView.prototype.setInt16()")}} | ||
- : Принимает число и сохраняет его как 16-битное знаковое целое число в 2 байтах по указанному смещению этого `DataView`. | ||
- {{jsxref("DataView.prototype.setInt32()")}} | ||
- : Принимает число и сохраняет его как 32-битное знаковое целое число в 4 байтах по указанному смещению этого `DataView`. | ||
- {{jsxref("DataView.prototype.setInt8()")}} | ||
- : Принимает число и сохраняет его как 8-битное знаковое целое число в байте по указанному смещению этого `DataView`. | ||
- {{jsxref("DataView.prototype.setUint16()")}} | ||
- : Принимает число и сохраняет его как 16-битное беззнаковое целое число в 2 байтах по указанному смещению этого `DataView`. | ||
- {{jsxref("DataView.prototype.setUint32()")}} | ||
- : Принимает число и сохраняет его как 32-битное беззнаковое целое число в 4 байтах по указанному смещению этого `DataView`. | ||
- {{jsxref("DataView.prototype.setUint8()")}} | ||
- : Принимает число и сохраняет его как 8-битное беззнаковое целое число в байте по указанному смещению этого `DataView`. | ||
|
||
## Примеры | ||
|
||
### Использование DataView | ||
|
||
```js | ||
var buffer = new ArrayBuffer(16); | ||
var dv = new DataView(buffer, 0); | ||
const buffer = new ArrayBuffer(16); | ||
const view = new DataView(buffer, 0); | ||
|
||
dv.setInt16(1, 42); | ||
dv.getInt16(1); //42 | ||
view.setInt16(1, 42); | ||
view.getInt16(1); // 42 | ||
``` | ||
|
||
## Спецификация | ||
## Спецификации | ||
|
||
{{Specifications}} | ||
|
||
## Таблица совместимости | ||
## Совместимость с браузерами | ||
|
||
{{Compat}} | ||
|
||
## Замечания совместимости | ||
|
||
Starting with Firefox 40, `DataView` requires to be constructed with a {{jsxref("Operators/new", "new")}} operator. Calling `DataView()` as a function without `new`, will throw a {{jsxref("TypeError")}} from now on. | ||
|
||
```js example-bad | ||
var dv = DataView(buffer, 0); | ||
// TypeError: calling a builtin DataView constructor without new is forbidden | ||
``` | ||
|
||
```js example-good | ||
var dv = new DataView(buffer, 0); | ||
``` | ||
|
||
## Также | ||
## Смотрите также | ||
|
||
- [jDataView](https://github.com/jDataView/jDataView): JavaScript library that polyfills and extends the `DataView` API to all browsers and Node.js. | ||
- [Полифил `DataView` в `core-js`](https://github.com/zloirock/core-js#ecmascript-typed-arrays) | ||
- {{jsxref("ArrayBuffer")}} | ||
- {{jsxref("SharedArrayBuffer")}} |