* 仕様書

[REFS[
- [2] [CITE@en-US[DOM Standard]]
( ([TIME[2014-06-23 14:49:32 +09:00]] 版))
<https://dom.spec.whatwg.org/#dom-nodeiterator-detach>
- [3] [CITE[ECMAScript® 2018 Language Specification]] ([TIME[2017-06-14 04:16:40 +09:00]]) <https://tc39.github.io/ecma262/#sec-isdetachedbuffer>
]REFS]

* detach ([CODE[ArrayBuffer]])

[15] 
[CODE[ArrayBuffer]] が [[detach]] されているかどうかを返す公開 [[API]]
はありませんが、それを検査している [[API]] を呼び出すことで判断できます。
一番手軽そうなのは [CODE[ArrayBuffer]] [[オブジェクト]]
の [CODE[byteLength]] [[メソッド]]が [CODE[TypeError]] [[例外]]を[[投げ]]るかどうかでしょう。
([[取得器]]を普通の方法で呼び出している限り、 [CODE[TypeError]]
を[[投げ]]るのは [[detach]] されているときだけです。)


[4] [[JavaScript]] の[[仕様書]]内部では、
[F(ss)[ArrayBufferData]] [[内部スロット]]を持つ[[オブジェクト]]に対する操作として、
[DFN[[CODE[IsDetachedBuffer]]]] が定義されています [SRC[>>3]]。
[CODE[ArrayBuffer]] や [CODE[SharedArrayBuffer]] が [[detach]] されたかどうかを返します。
[VAR[配列バッファー]]について、次のようにします [SRC[>>3]]。

[FIG(steps)[
= [5] [VAR[配列バッファー]]の [F(ss)[ArrayBufferData]] が [CODE[null]] の場合、
== [6] [[真]]を返します。
= [7] それ以外の場合、
== [8] [[偽]]を返します。
]FIG]

[11] [CODE[ArrayBuffer]]/[CODE[SharedArrayBuffer]] に関するほとんどの操作
([[JavaScript]] [[仕様書]]で定義されているものや[[構造化クローン]]) から呼び出されます。
[[detach]] されている場合には[[例外]]が[[投げ]]られることが多いです。

-*-*-

[9] [F(ss)[ArrayBufferData]] [[内部スロット]]と
[F(ss)[ArrayBufferByteLength]] [[内部スロット]]を持つ
[CODE[SharedArrayBuffer]] でない[[オブジェクト]]に対する操作として、
[DFN[[CODE[DetachArrayBuffer]]]] が定義されています [SRC[>>3]]。
[CODE[ArrayBuffer]] を [[detach]] します。
[VAR[配列バッファー]]について、次のようにします [SRC[>>3]]。

[FIG(steps)[
= [10] [VAR[配列バッファー]]の [F(ss)[ArrayBufferData]] を、 [CODE[null]] に設定します。
= [12] [VAR[配列バッファー]]の [F(ss)[ArrayBufferByteLength]] を、 [N[0]] に設定します。
= [13] [CODE[null]] を返します。
]FIG]

[14] [[構造化クローン]]や [CODE[TransferArrayBuffer]] から呼び出されます。

* 歴史

[1] [CITE[IRC logs: freenode / #whatwg / 20140417]]
( ([TIME[2014-04-18 14:29:25 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140417#l-575>

