/
457.txt
63 lines (49 loc) · 3.03 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
* 仕様書
[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]] 後にはどちらだったかわからなくなります。)
* 文脈
[5]
[CODE(DOMi)@en[ArrayBuffer]] [[コンストラクター]]に[[バイト数]]を指定することで、
([CODE[AllocateArrayBuffer]] により)
指定した[[長さ]]の [CODE(DOMi)@en[ArrayBuffer]] の[[インスタンス]]を作成できます。
[7]
[[型付き配列]]の[[コンストラクター]]に
[CODE(JS)@en[ArrayBuffer]]/[CODE(JS)@en[SharedArrayBuffer]]
''以外''を指定することで、
新しい[[型付き配列]]が作成され、 [CODE(DOMi)@en[ArrayBuffer]] も新しいものが作成されます。
[81]
[CODE(DOMa)@en[arrayBuffer]] [[メソッド]]は、
[CODE(DOMi)@en[ArrayBuffer]] の[[インスタンス]]を返します。
その他の [[fetch]] の処理も [CODE(DOMi)@en[ArrayBuffer]] や
[CODE(DOMi)@en[Uint8Array]] を内部的に作成することがあります。
** [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]] の歴史の項も参照。