[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に初期化されるということです。