ArrayBuffer

ArrayBuffer

仕様書

状態

[2] ArrayBuffer (や SharedArrayBuffer) は ArrayBufferData を持ちます。 値はデータブロックまたは null です。 コンストラクターデータブロックに設定されます。 DetachArrayBuffer によって null に変更されることがあります。

[3] ArrayBuffer (や SharedArrayBuffer) は ArrayBufferByteLength を持ちます。 値は ArrayBufferDataバイト長を表す整数となっています。 DetachArrayBuffer によって 0 に変更されることがあります。

[4] JavaScript仕様書演算構造化クローンでは、 ArrayBuffer かどうかの判断には ArrayBufferData 内部スロットの有無を調べています。 この条件だけでは SharedArrayBuffer も該当してしまうので、 その区別が必要な場合には、更に ArrayBufferData共有データブロックかを調べています。

演算

[20] byteLength プロパティーバイト長 (バイト列長さ = バイトの数) を取得できます。

[19] ArrayBufferバイト列を表していますが、 そのバイトに直接アクセスはできません。 その ArrayBuffer を操作するための型付き配列型オブジェクトを作る必要があります。


[11] 仕様書で使われる内部の演算として、 detach に関する IsDetachedBufferDetachArrayBuffer があります。

文脈

[5] ArrayBuffer コンストラクターバイト数を指定することで、 (AllocateArrayBuffer により) 指定した長さArrayBufferインスタンスを作成できます。

[21] AllocateArrayBufferCreateByteDataBlock を呼び出します。 CreateByteDataBlock は値 0バイトで構成されるバイト列データブロックを生成して返します。

[22] つまり、 ArrayBuffer 構築子で新規作成したバッファーは 0x00 の列となっていることが保証されます。

[23] プログラミング言語プラットフォームによってはメモリー領域を確保しても初期化されていることが保証されないことがありますが、 ArrayBuffer はそのようなプラットフォームとは異なり、 必ず NULL に初期化されるということです。

[7] ArrayBuffer オブジェクトslice メソッドは、新しい ArrayBuffer オブジェクトを作成します。

[9] 型付き配列に関する操作で型付き配列インスタンスが新たに作成される場合、 付随して ArrayBufferインスタンスも新たに作成されることがあります。

[6] 型付き配列set メソッドの内部処理でも ArrayBuffer が作成されます。

[8] ReadableStream の処理から呼び出されることがある内部処理 TransferArrayBuffer は既存のデータブロックを使って新しい ArrayBuffer を作成します。 既存の ArrayBufferDetachArrayBuffer されます。

[81] arrayBuffer メソッドは、 ArrayBufferインスタンスを返します。 その他の fetch の処理も ArrayBufferUint8Array を内部的に作成することがあります。

[10] 構造化クローンにより作成されることがあります。

BinaryType の値 arraybuffer

[48] 列挙型 BinaryType の値 arraybuffer は、 ArrayBuffer として返すべきことを表します >>47

[80] この値が指定された時、 WebSocketmessage イベントdata IDL属性の値は ArrayBuffer となります。

ごみ収集

[12] ArrayBuffer は通常のオブジェクトと同じようにごみ収集できます。

[13] detach されていない ArrayBufferデータブロックを持ちますが、 このデータブロックは複数の ArrayBuffer から参照されている可能性がありますから、 同時にごみ収集されるとは限りません。

歴史

[1] Typed Array の歴史の項も参照。

[14] WebAssembly JS and Web integration spec in Bikeshed by littledan · Pull Request #591 · WebAssembly/spec () https://github.com/WebAssembly/spec/pull/591

[15] Disallow ArrayBuffers bigger than 2**53 · Issue #1032 · tc39/ecma262 () https://github.com/tc39/ecma262/issues/1032

[16] Detached ArrayBuffer objects should not throw (annevk著, ) https://github.com/heycam/webidl/commit/6ec828c6e5eb383e11ffab527444656ec133e260

[17] "get a copy of the bytes held by the buffer source" should not fail for detached buffers · Issue #151 · heycam/webidl () https://github.com/heycam/webidl/issues/151

[18] Detached ArrayBuffer objects should not throw by annevk · Pull Request #605 · heycam/webidl () https://github.com/heycam/webidl/pull/605