HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
View in English Always switch to English
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
ArrayBuffer オブジェクトは、一般的な生のバイナリーデータバッファーを表現するために使用します。
ArrayBuffer
これはバイトの配列で、他の言語ではよく「バイト配列」と呼ばれます。ArrayBuffer の内容を直接操作することはできません。代わりに、バッファーを特定の形式で表現する型付き配列オブジェクトまたは DataView オブジェクトのいずれかを作成して、バッファーの内容を読み書きします。
DataView
ArrayBuffer() コンストラクターは、指定した長さの ArrayBuffer をバイト単位で作成します。既存のデータから、たとえば、Base64 文字列やローカルファイルから配列バッファーを取得することもできます。
ArrayBuffer()
ArrayBuffer は移譲可能オブジェクトです。
ArrayBuffer オブジェクトは maxByteLength オプションを指定して ArrayBuffer() コンストラクターを呼び出すことで、サイズを変更することができるようになります。ArrayBuffer がサイズ変更可能かどうか、またその最大サイズを知るには、それぞれ resizable と maxByteLength のプロパティにアクセスすれば分かります。サイズ変更可能な ArrayBuffer には、 resize() を呼び出して新しいサイズを割り当てることができます。新しいバイトは 0 に初期化されます。
maxByteLength
resizable
resize()
これらの機能により、ArrayBuffer のサイズ変更がより効率的になります。そうしないと、新しいサイズのバッファーのコピーを持たなければなりません。また、この点で JavaScript が WebAssembly と同等になります(WASM の線形メモリーは WebAssembly.Memory.prototype.grow() でサイズ変更が可能です)。
WebAssembly.Memory.prototype.grow()
ArrayBuffer オブジェクトは、ウェブワーカーやサービスワーカーなど、異なる実行コンテキスト間で構造化クローンアルゴリズムを使用して移譲することができます。これは、ArrayBuffer を移譲可能オブジェクトとして Worker.postMessage() または ServiceWorker.postMessage() の呼び出しに渡すことで実現されます。純粋な JavaScript では、 transfer() または transferToFixedLength() メソッドを使用して、ある ArrayBuffer から他へメモリーの所有権を移すこともできます。
Worker.postMessage()
ServiceWorker.postMessage()
transfer()
transferToFixedLength()
ArrayBuffer が移譲されると、元のコピーは分離状態になります。これは、そのコピーが使用できなくなるということです。いかなる時点においても、基盤となるメモリーに実際にアクセスできる ArrayBuffer のコピーは一つだけです。分離されたバッファーには以下のような挙動になります。
byteLength
slice()
TypeError
ArrayBuffer が分離されているかどうかは、 detached プロパティで確認することができます。
detached
新しい ArrayBuffer オブジェクトを作成します。
ArrayBuffer[Symbol.species]
派生オブジェクトを作成する際に使用するコンストラクター関数です。
ArrayBuffer.isView()
arg が型付き配列オブジェクトや DataView のような ArrayBuffer ビューのいずれかである場合は true を返します。それ以外の場合は false を返します。
arg
true
false
これらのプロパティは ArrayBuffer.prototype で定義されており、すべての ArrayBuffer インスタンスで共有されます。
ArrayBuffer.prototype
ArrayBuffer.prototype.byteLength
ArrayBufferのサイズをバイト単位で指定します。これは配列の構築時に設定され、ArrayBuffer がサイズ変更可能な場合にのみ ArrayBuffer.prototype.resize() メソッドを使用して変更することができます。
ArrayBuffer.prototype.resize()
ArrayBuffer.prototype.constructor
インスタンスオブジェクトを作成したコンストラクター関数。ArrayBuffer インスタンスの場合、初期値は ArrayBuffer コンストラクターです。
ArrayBuffer.prototype.detached
読み取り専用です。ArrayBuffer が既に分離されている(移譲済みである)場合は true、そうでなければ false を返し案す。
ArrayBuffer.prototype.maxByteLength
読み取り専用で、ArrayBuffer のサイズを変更できる最大長をバイト数で指定します。これは配列が構築される際に設定され、変更することはできません。
ArrayBuffer.prototype.resizable
読み取り専用です。ArrayBuffer のサイズを変更できる場合は true を、変更できない場合は false を返します。
ArrayBuffer.prototype[Symbol.toStringTag]
[Symbol.toStringTag] プロパティの初期値は文字列 "ArrayBuffer" です。このプロパティは Object.prototype.toString() で使用されます。
[Symbol.toStringTag]
"ArrayBuffer"
Object.prototype.toString()
ArrayBuffer を指定したサイズ(バイト単位)にサイズ変更します。
ArrayBuffer.prototype.slice()
新しい ArrayBuffer に、begin (の位置)から end (の手前)までのバイトのコピーを入れて返します。begin または end のどちらかが負の値の場合は、配列の先頭からではなく、配列の末尾からの位置を指します。
begin
end
ArrayBuffer.prototype.transfer()
このバッファーと同じバイト内容を持つ新しい ArrayBuffer を作成し、その後このバッファーを切り離します。
ArrayBuffer.prototype.transferToFixedLength()
このバッファーと同じバイト内容を持つ、新しいリサイズ不可能な ArrayBuffer を作成し、その後でこのバッファーを分離します。
この例では、バッファーを参照する Int32Array ビューを持つ 8 バイトのバッファーを作成します。
Int32Array
const buffer = new ArrayBuffer(8); const view = new Int32Array(buffer);
Enable JavaScript to view this browser compatibility table.
core-js
SharedArrayBuffer