[2] [DFN[[RUBYB[データブロック]@en[Data Block]]]]は、
[[バイト列]]を格納できる[[バッファー]]を表す [[JavaScript]] [[仕様書]]上の[[データ構造]]
([[仕様書型]]) です。

* 仕様書

[REFS[
- [1] [CITE[ECMAScript® 2018 Language Specification]] ([TIME[2017-06-14 04:16:40 +09:00]]) <https://tc39.github.io/ecma262/#sec-data-blocks>
]REFS]

* 意味

[4] 
通常の[[データブロック][データブロック (JavaScript)]] ([CODE(JS)@en[ArrayBuffer]] で使われるもの)
の他に、
[[共有データブロック]] ([CODE(JS)@en[SharedArrayBuffer]] で使われるもの)
があります。

[13] 
[[データブロック][データブロック (JavaScript)]]と[[共有データブロック]]は、
作成直後はすべて [N[0x00]] の[[バイト]]の列となっています。

* 演算

[5] [[JavaScript]] [[仕様書]]の[[操作]] 
[DFN[[CODE[CreateByteDataBlock]]]]
は、[[正整数]][VAR[サイズ]]について、次のようにします [SRC[>>1]]。

[FIG(steps)[
= [6] [[バイト数]]が[VAR[サイズ]]の[[データブロック][データブロック (JavaScript)]]を作成できない場合、
== [7] [CODE(JS)@en[RangeError]] [[例外]]を[[投げ]]、ここで停止します。
= [8] [VAR[データブロック]]を、[[バイト数]]が[VAR[サイズ]]の新しい[[データブロック][データブロック (JavaScript)]]に設定します。
= [11] [ [N[0]], [VAR[サイズ]] - [N[1]] ] の[[範囲]]の各[[整数]][VAR[索引]]について、
== [9] [VAR[データブロック]] [ [VAR[索引]] ] を、 [N[0]] に設定します。
= [10] [VAR[データブロック]]を返します。
]FIG]

[12] 
この[[操作]]は、[CODE(DOMi)@en[ArrayBuffer]] を作成する[[操作]]
[CODE(JS)@en[AllocateArrayBuffer]] から呼び出されます。

* ごみ収集

[14] 
[[データブロック][データブロック (JavaScript)]]は、通常の[[オブジェクト]]同様、
どこからも[[参照]]されなくなったら ([[参照]]している [CODE[ArrayBuffer]]
がすべて破棄されたら) [[ごみ収集]]できます。

[15] [[データブロック][データブロック (JavaScript)]]は複数の
[CODE[ArrayBuffer]] [[オブジェクト]]から同時に参照されている状態となることがあります。


* 関連

[3] [[HTML]] の[[スクリプトデータブロック]]とは無関係です。

