ArrayBuffer
Базовый уровень Широко доступен
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна в браузерах с июля 2015 года.
Объект ArrayBuffer используется для представления общего буфера необработанных двоичных данных.
Это массив байтов, который часто называют "массивом байтов" в других языках. Вы не можете напрямую изменять содержимое ArrayBuffer; вместо этого вы создаете один из объектов типизированных массивов или объект DataView, который представляет буфер в определенном формате, и используете его для чтения и записи содержимого буфера.
Конструктор ArrayBuffer() создает новый ArrayBuffer указанной длины в байтах. Вы также можете получить буфер массива из существующих данных, например, из строки Base64 или из локального файла.
ArrayBuffer — это передаваемый объект.
Описание
Изменение размера ArrayBuffers
Объекты ArrayBuffer можно сделать изменяемыми, включив опцию maxByteLength при вызове конструктора ArrayBuffer(). Вы можете запросить, является ли ArrayBuffer изменяемым и каков его максимальный размер, получив доступ к его свойствам resizable и maxByteLength соответственно. Вы можете присвоить новый размер изменяемому ArrayBuffer с помощью вызова resize(). Новые байты инициализируются значением 0.
Эти функции делают изменение размера ArrayBuffer более эффективным — в противном случае вам придется создавать копию буфера нового размера. Это также дает JavaScript паритет с WebAssembly в этом отношении (линейная память Wasm может быть изменена с помощью WebAssembly.Memory.prototype.grow()).
Передача ArrayBuffers
Объекты ArrayBuffer можно передавать между различными контекстами выполнения, такими как Web Workers или Service Workers, используя алгоритм структурированного клонирования. Это делается путем передачи ArrayBuffer в качестве передаваемого объекта в вызове Worker.postMessage() или ServiceWorker.postMessage(). В чистом JavaScript вы также можете передать владение памятью от одного ArrayBuffer к другому, используя его метод transfer() или transferToFixedLength().
Когда ArrayBuffer передается, его исходная копия становится отсоединенной — это означает, что она больше не может использоваться. В любой момент времени будет только одна копия ArrayBuffer, которая фактически имеет доступ к базовой памяти. Отсоединенные буферы ведут себя следующим образом:
-
byteLengthстановится 0 (как в буфере, так и в связанных представлениях типизированных массивов). - Методы, такие как
resize()иslice(), вызываютTypeErrorпри вызове. Методы связанных представлений типизированных массивов также вызываютTypeError.
Вы можете проверить, отсоединен ли ArrayBuffer, по его свойству detached.
Конструктор
-
ArrayBuffer() - Создает новый объект
ArrayBuffer.
Статические свойства
-
ArrayBuffer[Symbol.species] - Конструктор, который используется для создания производных объектов.
Статические методы
-
ArrayBuffer.isView() - Возвращает
true, еслиargявляется одним из представлений ArrayBuffer, таким как объекты типизированных массивов илиDataView. В противном случае возвращаетfalse.
Свойства экземпляра
Эти свойства определены в ArrayBuffer.prototype и разделяются всеми экземплярами ArrayBuffer.
-
ArrayBuffer.prototype.byteLength - Размер
ArrayBufferв байтах. Он устанавливается при создании массива и может быть изменен только с помощью методаArrayBuffer.prototype.resize(), еслиArrayBufferявляется изменяемым. -
ArrayBuffer.prototype.constructor - Конструктор, который создал объект экземпляра. Для экземпляров
ArrayBufferначальное значение — конструкторArrayBuffer. -
ArrayBuffer.prototype.detached - Только для чтения. Возвращает
true, еслиArrayBufferбыл отсоединен (передан), илиfalse, если нет. -
ArrayBuffer.prototype.maxByteLength - Максимальная длина
ArrayBufferв байтах, до которой можно изменить размер этого буфера. Это свойство только для чтения, оно устанавливается при создании массива и не может быть изменено. -
ArrayBuffer.prototype.resizable - Только для чтения. Возвращает
true, еслиArrayBufferможно изменить, илиfalse, если нет. -
ArrayBuffer.prototype[Symbol.toStringTag] - Начальное значение свойства
[Symbol.toStringTag]— строка"ArrayBuffer". Это свойство используется вObject.prototype.toString().
Методы экземпляра
-
ArrayBuffer.prototype.resize() - Изменяет размер
ArrayBufferдо указанного размера в байтах. -
ArrayBuffer.prototype.slice() - Возвращает новый
ArrayBuffer, содержимое которого является копией байтов данногоArrayBufferотbegin(включительно) доend(исключая). Еслиbeginилиendотрицательны, они относятся к индексу с конца массива, а не с начала. -
ArrayBuffer.prototype.transfer() - Создает новый
ArrayBufferс тем же байтовым содержимым, что и этот буфер, а затем отсоединяет этот буфер. -
ArrayBuffer.prototype.transferToFixedLength() - Создает новый не изменяемый
ArrayBufferс тем же байтовым содержимым, что и этот буфер, а затем отсоединяет этот буфер.
Примеры
Создание ArrayBuffer
В этом примере мы создаем буфер размером 8 байт с представлением Int32Array, ссылающимся на буфер:
const buffer = new ArrayBuffer(8); const view = new Int32Array(buffer);
Спецификации
Совместимость с браузерами
| Desktop | Mobile | Server | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
ArrayBuffer |
7 |
12 |
4 |
11.6 |
5.1 |
18 |
4 |
12 |
4.2 |
1.0 |
4 |
4.2 |
1.0.0 |
1.0 |
0.10.0 |
@@species |
51 |
13 |
48 |
38 |
10 |
51 |
48 |
41 |
10 |
5.0 |
51 |
10 |
1.0.0 |
1.0 |
6.5.0 |
ArrayBuffer |
7 |
12 |
4 |
11.6 |
5.1 |
18 |
4 |
12 |
4.2 |
1.0 |
4 |
4.2 |
1.0.0 |
1.0 |
0.10.0 |
byteLength |
7 |
12 |
4 |
11.6 |
5.1 |
18 |
4 |
12 |
4.2 |
1.0 |
4 |
4.2 |
1.0.0 |
1.0 |
0.10.0 |
detached |
114 |
114 |
122 |
100 |
17.4 |
114 |
122 |
76 |
17.4 |
23.0 |
114 |
17.4 |
1.0.19 |
1.33 |
21.0.0 |
isView |
32 |
12 |
29 |
19 |
7 |
32 |
29 |
19 |
7 |
2.0 |
4.4.3 |
7 |
1.0.0 |
1.0 |
4.0.0 |
maxByteLength |
111 |
111 |
128 |
97 |
16.4 |
111 |
128 |
75 |
16.4 |
22.0 |
111 |
16.4 |
1.0.0 |
1.33 |
20.0.0 |
resizable |
111 |
111 |
128 |
97 |
16.4 |
111 |
128 |
75 |
16.4 |
22.0 |
111 |
16.4 |
1.0.0 |
1.33 |
20.0.0 |
resize |
111 |
111 |
128 |
97 |
16.4 |
111 |
128 |
75 |
16.4 |
22.0 |
111 |
16.4 |
1.0.0 |
1.33 |
20.0.0 |
slice |
17 |
12 |
12Нестандартный методArrayBuffer.slice() удален в Firefox 53 (но стандартизированная версия ArrayBuffer.prototype.slice() сохранена. |
12.1 |
5.1 |
18 |
14Нестандартный методArrayBuffer.slice() удален в Firefox for Android 53 (но стандартизированная версия ArrayBuffer.prototype.slice() сохранена. |
12.1 |
6 |
1.0 |
4.4 |
6 |
1.0.0 |
1.0 |
0.12.0 |
transfer |
114 |
114 |
122 |
100 |
17.4 |
114 |
122 |
76 |
17.4 |
23.0 |
114 |
17.4 |
1.0.19 |
1.33 |
21.0.0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
transferToFixedLength |
114 |
114 |
122 |
100 |
17.4 |
114 |
122 |
76 |
17.4 |
23.0 |
114 |
17.4 |
1.0.19 |
1.33 |
21.0.0 |
См. также
- Polyfill of
ArrayBufferincore-js - Руководство по типизированным массивам JavaScript
SharedArrayBuffer- RangeError: invalid array length
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer