/
457.txt
89 lines (67 loc) · 3.99 KB
/
457.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
* 仕様書
[REFS[
- [68] [CITE[ECMAScript® 2018 Language Specification]] ([TIME[2017-06-14 04:16:40 +09:00]]) <https://tc39.github.io/ecma262/#sec-arraybuffer-objects>
- [47] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#dom-binarytype-arraybuffer>
]REFS]
* 状態
[2]
[CODE(DOMi)@en[ArrayBuffer]] (や [CODE(DOMi)@en[SharedArrayBuffer]]) は [F(ss)[ArrayBufferData]] を持ちます。
値は[[データブロック][データブロック (JavaScript)]]または
[CODE[null]] です。
[[コンストラクター]]で[[データブロック][データブロック (JavaScript)]]に設定されます。
[CODE[DetachArrayBuffer]] によって [CODE[null]] に変更されることがあります。
[3]
[CODE(DOMi)@en[ArrayBuffer]] (や [CODE(DOMi)@en[SharedArrayBuffer]])
は [F(ss)[ArrayBufferByteLength]] を持ちます。
値は [F(ss)[ArrayBufferData]] の[[バイト長]]を表す[[整数]]となっています。
[CODE[DetachArrayBuffer]] によって [N[0]] に変更されることがあります。
[4]
[[JavaScript]] の[[仕様書]]の[[演算]]や[[構造化クローン]]では、
[CODE(DOMi)@en[ArrayBuffer]] かどうかの判断には
[F(ss)[ArrayBufferData]] [[内部スロット]]の有無を調べています。
この条件だけでは [CODE(DOMi)@en[SharedArrayBuffer]] も該当してしまうので、
その区別が必要な場合には、更に [F(ss)[ArrayBufferData]] が[[データブロック][データブロック (JavaScript)]]か[[共有データブロック]]かを調べています。
([CODE[DetachArrayBuffer]] 後にはどちらだったかわからなくなります。)
* 演算
[11]
[[仕様書]]で使われる内部の[[演算]]として、
[[detach]] に関する
[CODE[IsDetachedBuffer]] と
[CODE[DetachArrayBuffer]] があります。
* 文脈
[5]
[CODE(DOMi)@en[ArrayBuffer]] [[コンストラクター]]に[[バイト数]]を指定することで、
([CODE[AllocateArrayBuffer]] により)
指定した[[長さ]]の [CODE(DOMi)@en[ArrayBuffer]] の[[インスタンス]]を作成できます。
[7]
[CODE(DOMi)@en[ArrayBuffer]] [[オブジェクト]]の
[CODE(DOMm)@en[slice]] [[メソッド]]は、新しい [CODE(DOMi)@en[ArrayBuffer]]
[[オブジェクト]]を作成します。
[9]
[[型付き配列]]に関する操作で[[型付き配列]]の[[インスタンス]]が新たに作成される場合、
付随して [CODE(DOMi)@en[ArrayBuffer]] の[[インスタンス]]も新たに作成されることがあります。
;; [[型付き配列]]参照。
[6]
[[型付き配列]]の [CODE(DOMm)@en[set]] [[メソッド]]の内部処理でも
[CODE(JS)@en[ArrayBuffer]] が作成されます。
[8] [CODE[ReadableStream]] の処理から呼び出されることがある内部処理
[CODE[TransferArrayBuffer]] は既存の[[データブロック][データブロック (JavaScript)]]を使って新しい
[CODE(JS)@en[ArrayBuffer]] を作成します。
既存の [CODE(JS)@en[ArrayBuffer]] は [CODE[DetachArrayBuffer]] されます。
[81]
[CODE(DOMa)@en[arrayBuffer]] [[メソッド]]は、
[CODE(DOMi)@en[ArrayBuffer]] の[[インスタンス]]を返します。
その他の [[fetch]] の処理も [CODE(DOMi)@en[ArrayBuffer]] や
[CODE(DOMi)@en[Uint8Array]] を内部的に作成することがあります。
[10]
[[構造化クローン]]により作成されることがあります。
** [CODE(DOMi)@en[BinaryType]] の値 [CODE(DOM)@en[arraybuffer]]
[48] [[列挙型]] [CODE(DOMi)@en[[[BinaryType]]]] の値
[DFN[[CODE(DOM)@en[[[arraybuffer]]]]]] は、 [CODE(DOMi)@en[[[ArrayBuffer]]]]
として返すべきことを表します [SRC[>>47]]。
[80]
この値が指定された時、 [[WebSocket]] の [CODE(DOMe)@en[message][onmessage]]
[[イベント]]の [CODE(DOMa)@en[data][data (MessageEvent)]]
[[IDL属性]]の値は [CODE(JS)@en[ArrayBuffer]] となります。
* 歴史
;; [1] [[Typed Array]] の歴史の項も参照。