[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 に関する
IsDetachedBuffer
と
DetachArrayBuffer
があります。
[5]
ArrayBuffer
コンストラクターにバイト数を指定することで、
(AllocateArrayBuffer
により)
指定した長さの ArrayBuffer
のインスタンスを作成できます。
[21]
AllocateArrayBuffer
は
CreateByteDataBlock
を呼び出します。
CreateByteDataBlock
は値 0 のバイトで構成されるバイト列のデータブロックを生成して返します。
[22]
つまり、 ArrayBuffer
構築子で新規作成したバッファーは 0x00
の列となっていることが保証されます。
[7]
ArrayBuffer
オブジェクトの
slice
メソッドは、新しい ArrayBuffer
オブジェクトを作成します。
[9]
型付き配列に関する操作で型付き配列のインスタンスが新たに作成される場合、
付随して ArrayBuffer
のインスタンスも新たに作成されることがあります。
[6]
型付き配列の set
メソッドの内部処理でも
ArrayBuffer
が作成されます。
[8] ReadableStream
の処理から呼び出されることがある内部処理
TransferArrayBuffer
は既存のデータブロックを使って新しい
ArrayBuffer
を作成します。
既存の ArrayBuffer
は DetachArrayBuffer
されます。
[81]
arrayBuffer
メソッドは、
ArrayBuffer
のインスタンスを返します。
その他の fetch の処理も ArrayBuffer
や
Uint8Array
を内部的に作成することがあります。
BinaryType
の値 arraybuffer
[48] 列挙型 BinaryType
の値
arraybuffer
は、 ArrayBuffer
として返すべきことを表します >>47。
[80]
この値が指定された時、 WebSocket の message
イベントの data
IDL属性の値は ArrayBuffer
となります。
[12] ArrayBuffer
は通常のオブジェクトと同じようにごみ収集できます。
[13] detach されていない ArrayBuffer
はデータブロックを持ちますが、
このデータブロックは複数の
ArrayBuffer
から参照されている可能性がありますから、
同時にごみ収集されるとは限りません。
[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
ArrayBuffer
はそのようなプラットフォームとは異なり、 必ずNULL
に初期化されるということです。