diff options
Diffstat (limited to 'files/ja/web/javascript/reference/global_objects/arraybuffer')
7 files changed, 574 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/@@species/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/@@species/index.html new file mode 100644 index 0000000000..1b1043119a --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/@@species/index.html @@ -0,0 +1,64 @@ +--- +title: 'get ArrayBuffer[@@species]' +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species +tags: + - ArrayBuffer + - JavaScript + - Method + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species +--- +<div>{{JSRef}}</div> + +<p><strong><code>ArrayBuffer[@@species]</code></strong> アクセサープロパティは、<code>ArrayBuffer</code> コンストラクターを返します。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p>species アクセサープロパティは、既定のコンストラクターである <code>ArrayBuffer</code> オブジェクトを返します。サブクラスのコンストラクターはコンストラクターに代入することで、これをオーバーライドできます。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Species_in_ordinary_objects" name="Species_in_ordinary_objects">通常のオブジェクトの spicies</h3> + +<p>species プロパティは、<code>ArrayBuffer</code> オブジェクトの既定のコンストラクター関数である <code>ArrayBuffer</code> コンストラクターを返します。</p> + +<pre class="brush: js notranslate">ArrayBuffer[Symbol.species]; // ArrayBuffer() 関数</pre> + +<h3 id="Species_in_derived_objects" name="Species_in_derived_objects">派生オブジェクトの spicies</h3> + +<p>派生コレクションオブジェクト (たとえば、独自の配列バッファーである <code>MyArrayBuffer</code>) では、<code>MyArrayBuffer</code> の species は <code>MyArrayBuffer</code> コンストラクターです。しかし、派生クラスのメソッドで、親である <code>ArrayBuffer</code> オブジェクトを返すためにこれをオーバーライドしたいかもしれません。</p> + +<pre class="brush: js notranslate">class MyArrayBuffer extends ArrayBuffer { + // MyArrayBuffer species を親である ArrayBuffer コンストラクタにオーバーライド。 + static get [Symbol.species]() { return ArrayBuffer; } +}</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.ArrayBuffer.@@species")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("ArrayBuffer")}}</li> + <li>{{jsxref("Symbol.species")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/arraybuffer/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/arraybuffer/index.html new file mode 100644 index 0000000000..2864dc83d3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/arraybuffer/index.html @@ -0,0 +1,82 @@ +--- +title: ArrayBuffer() コンストラクター +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/ArrayBuffer +tags: + - ArrayBuffer + - Constructor + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/ArrayBuffer +--- +<div>{{JSRef}}</div> + +<p><strong><code>ArrayBuffer()</code></strong> コンストラクターは {{jsxref("ArrayBuffer")}} オブジェクトを生成するために使用されます。</p> + +<div>{{EmbedInteractiveExample("pages/js/arraybuffer-constructor.html","shorter")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力していただける場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">new ArrayBuffer(<var>length</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>length</var></code></dt> + <dd>作成する配列バッファーのサイズをバイト単位で指定します。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定されたサイズの新しい <code>ArrayBuffer</code> オブジェクト。その内容は 0 に初期化されます。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>{{jsxref("RangeError")}}: <code>length</code> が {{jsxref("Number.MAX_SAFE_INTEGER")}} よりも大きい (>= 2 ** 53) か、負の値であった場合。</p> + +<h2 id="Compatibility_notes" name="Compatibility_notes">互換性の注意</h2> + +<p>ECMAScript 2015 から、<code>ArrayBuffer</code> のコンストラクターは構築に {{jsxref("Operators/new", "new")}} 演算子が必要になりました。 <code>new</code> を指定せずに関数として <code>ArrayBuffer</code> コンストラクターを呼び出すと、 {{jsxref("TypeError")}} が発生するようになりました。</p> + +<pre class="brush: js example-bad notranslate">var dv = ArrayBuffer(10); +// TypeError: calling a builtin ArrayBuffer constructor +// without new is forbidden</pre> + +<pre class="brush: js example-good notranslate">var dv = new ArrayBuffer(10);</pre> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Creating_an_ArrayBuffer" name="Creating_an_ArrayBuffer">ArrayBuffer の作成</h3> + +<p>この例では、バッファーを参照する {{jsxref("Global_Objects/Int32Array", "Int32Array")}} ビューを持つ 8 バイトのバッファーを作成しています。</p> + +<pre class="brush: js notranslate">var buffer = new ArrayBuffer(8); +var view = new Int32Array(buffer);</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様書</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.ArrayBuffer.ArrayBuffer")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Typed_arrays">JavaScript 型付き配列</a></li> + <li>{{jsxref("SharedArrayBuffer")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html new file mode 100644 index 0000000000..1ae1c0727f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html @@ -0,0 +1,56 @@ +--- +title: ArrayBuffer.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength +tags: + - ArrayBuffer + - JavaScript + - Property + - Prototype +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength +--- +<div>{{JSRef}}</div> + +<p><strong><code>byteLength</code></strong> アクセサープロパティは、{{jsxref("ArrayBuffer")}} の長さをバイト単位で表します。</p> + +<div>{{EmbedInteractiveExample("pages/js/arraybuffer-bytelength.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力していただける場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>byteLength</code> プロパティはアクセサープロパティで、 set アクセサー関数が <code>undefined</code>、つまりこのプロパティは読み取り専用です。値は配列が構築されるときに設定され、変更することができません。この <code>ArrayBuffer</code> が取り外された場合、このプロパティは 0 を返します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_byteLength" name="Using_byteLength">byteLength の使用</h3> + +<pre class="brush:js notranslate">var buffer = new ArrayBuffer(8); +buffer.byteLength; // 8 +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.ArrayBuffer.byteLength")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("ArrayBuffer")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/index.html new file mode 100644 index 0000000000..b54ef2e308 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/index.html @@ -0,0 +1,89 @@ +--- +title: ArrayBuffer +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer +tags: + - ArrayBuffer + - Constructor + - JavaScript + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer +--- +<div>{{JSRef}}</div> + +<p><strong><code>ArrayBuffer</code></strong> オブジェクトは、一般的な固定長の生のバイナリデータバッファを表現するために使用されます。</p> + +<p><code>ArrayBuffer</code> はバイトの配列で、他の言語では「バイト配列」と呼ばれることが多いです。ArrayBuffer の内容を直接操作することはできません。代わりに、型付きの配列オブジェクトか {{jsxref("DataView")}} オブジェクトのいずれかを作成して、バッファを特定の形式で表現し、バッファの内容を読み書きするためにそれを使用します。</p> + +<p><code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/ArrayBuffer">ArrayBuffer()</a></code> コンストラクタは、指定した長さの <code>ArrayBuffer</code> をバイト単位で作成します。<a href="/ja/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Appendix_to_Solution_1_Decode_a_Base64_string_to_Uint8Array_or_ArrayBuffer">Base64 文字列</a>や<a href="/ja/docs/Web/API/FileReader/readAsArrayBuffer">ローカルファイル</a>などの既存のデータから配列バッファを取得することもできます。</p> + +<h2 id="コンストラクタ">コンストラクタ</h2> + +<dl> + <dt>{{jsxref("ArrayBuffer.ArrayBuffer", "ArrayBuffer()")}}</dt> + <dd>新しい <code>ArrayBuffer</code> オブジェクトを作成します。</dd> +</dl> + +<h2 id="静的プロパティ">静的プロパティ</h2> + +<dl> + <dt>{{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}}</dt> + <dd>派生オブジェクトを作成する際に使用するコンストラクタ関数です。</dd> +</dl> + +<h2 id="静的メソッド">静的メソッド</h2> + +<dl> + <dt>{{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(<var>arg</var>)")}}</dt> + <dd><code><var>arg</var></code> が<a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray">型付き配列オブジェクト</a>や {{jsxref("DataView")}} のような ArrayBuffer ビューのいずれかである場合に <code>true</code> を返します。それ以外の場合は <code>false</code> を返します。</dd> +</dl> + +<h2 id="インスタンスプロパティ">インスタンスプロパティ</h2> + +<dl> + <dt>{{jsxref("ArrayBuffer.prototype.byteLength")}}</dt> + <dd><code>ArrayBuffer</code> の読み取り専用サイズ (バイト単位)。これは配列が構築されたときに設定され、変更することはできません。</dd> +</dl> + +<h2 id="インスタンスメソッド">インスタンスメソッド</h2> + +<dl> + <dt>{{jsxref("ArrayBuffer.prototype.slice()")}}</dt> + <dd><code>ArrayBuffer</code> のバイト数のコピーであり、その内容は、<code><var>begin</var></code> (含む) から <code><var>end</var></code> (排他的) までのバイト数である。<code><var>begin</var></code> または <code><var>end</var></code> のどちらかが負の値の場合は、配列の先頭からではなく、配列の末尾からのインデックスを指します。</dd> +</dl> + +<h2 id="Example" name="Example">例</h2> + +<h3 id="ArrayBuffer_の作成">ArrayBuffer の作成</h3> + +<p>この例では、バッファを参照する {{jsxref("Int32Array")}} ビューを持つ 8 バイトバッファを作成します。</p> + +<pre class="brush: js notranslate">const buffer = new ArrayBuffer(8); +const view = new Int32Array(buffer);</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-arraybuffer-objects', 'ArrayBuffer')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> + +<div class="hidden">このページの互換性一覧表は、構造化データから生成されています。データに貢献したい方は、https://github.com/mdn/browser-compat-data をチェックしてプルリクエストを送ってください。</div> + +<p>{{Compat("javascript.builtins.ArrayBuffer")}}</p> + +<h2 id="あわせて参照">あわせて参照</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li> + <li>{{jsxref("SharedArrayBuffer")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/isview/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/isview/index.html new file mode 100644 index 0000000000..f679275a04 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/isview/index.html @@ -0,0 +1,80 @@ +--- +title: ArrayBuffer.isView() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView +tags: + - ArrayBuffer + - JavaScript + - Method + - Reference + - TypedArrays +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView +--- +<div>{{JSRef}}</div> + +<p><strong><code>ArrayBuffer.isView()</code></strong> メソッドは、渡された値が <code>ArrayBuffer</code> のビューのうちの一つ、例えば<a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/TypedArray">型付き配列オブジェクト</a>や {{jsxref("DataView")}} であるかどうかを判断します。</p> + +<div>{{EmbedInteractiveExample("pages/js/arraybuffer-isview.html","shorter")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力していただける場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">ArrayBuffer.isView(<var>value</var>)</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>value</var></code></dt> + <dd>チェックする値です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>渡された引数が {{jsxref("ArrayBuffer")}} のビューのうちの一つであれば <code>true</code> を、そうでなければ <code>false</code> を返します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_isView" name="Using_isView">isView の使用</h3> + +<pre class="brush: js notranslate">ArrayBuffer.isView(); // false +ArrayBuffer.isView([]); // false +ArrayBuffer.isView({}); // false +ArrayBuffer.isView(null); // false +ArrayBuffer.isView(undefined); // false +ArrayBuffer.isView(new ArrayBuffer(10)); // false + +ArrayBuffer.isView(new Uint8Array()); // true +ArrayBuffer.isView(new Float32Array()); // true +ArrayBuffer.isView(new Int8Array(10).subarray(0, 3)); // true + +const buffer = new ArrayBuffer(2); +const dv = new DataView(buffer); +ArrayBuffer.isView(dv); // true +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.ArrayBuffer.isView")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Typed_arrays">JavaScript の型付き配列</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/slice/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/slice/index.html new file mode 100644 index 0000000000..ff1be1c5b0 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/slice/index.html @@ -0,0 +1,77 @@ +--- +title: ArrayBuffer.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice +tags: + - ArrayBuffer + - JavaScript + - Method + - Prototype + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice +--- +<div>{{JSRef}}</div> + +<p><strong><code>slice()</code></strong> メソッドは新しい <code>ArrayBuffer</code> を返し、その中にこの <code>ArrayBuffer</code> の <code>begin</code> から <code>end</code> の手前までをコピーします。</p> + +<div>{{EmbedInteractiveExample("pages/js/arraybuffer-slice.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力していただける場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">arraybuffer.slice(<var>begin</var>[, <var>end</var>])</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>begin</var></code></dt> + <dd>スライスの起点を表すゼロ基点のバイトインデックスです。</dd> +</dl> + +<dl> + <dt><code><var>end</var></code> {{optional_inline}}</dt> + <dd>スライスをその前で終了するバイトインデックスです。 end が指定されなかった場合は、新しい <code>ArrayBuffer</code> は、この <code>ArrayBuffer</code> の起点から終点まですべてのバイトを含みます。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>新しい {{jsxref("ArrayBuffer")}} オブジェクト。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p><code>slice()</code> メソッドは、 <code>end</code> 引数で指定されたバイトの手前までコピーを行います。 <code>begin</code> または <code>end</code> のどちらかが負の数の場合、開始位置とは反対に、配列の末尾からのインデックスを参照します。</p> + +<p><code>begin</code> および <code>end</code> 引数で指定された範囲は、現在の配列で妥当なインデックスの範囲に丸められます。新しい <code>ArrayBuffer</code> の計算された長さが負の数であった場合、ゼロに丸められます。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Copying_an_ArrayBuffer" name="Copying_an_ArrayBuffer">ArrayBuffer のコピー</h3> + +<pre class="brush: js notranslate">const buf1 = new ArrayBuffer(8); +const buf2 = buf1.slice(0); +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様書</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.ArrayBuffer.slice")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("ArrayBuffer")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html b/files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html new file mode 100644 index 0000000000..2070e902a4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html @@ -0,0 +1,126 @@ +--- +title: ArrayBuffer.transfer() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/transfer +tags: + - ArrayBuffer + - ECMAScript7 + - Experimental + - Expérimental(2) + - JavaScript + - Method + - Reference + - Référence(2) + - TypedArrays +translation_of: Archive/Web/JavaScript/ArrayBuffer.transfer +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p>静的な <code><strong>ArrayBuffer.transfer()</strong></code> メソッドは、<code>oldBuffer</code> のデータから得られる内容の新しい <code>ArrayBuffer</code> を返し、<code>newByteLength</code> によって切断されるかゼロ拡張されます。<code>newByteLength</code> が <code>undefined</code> なら、<code>oldBuffer</code> の <code>byteLength</code> が使われます。この操作により <code>oldBuffer</code> はデタッチ状態のままになります。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox"><code>ArrayBuffer.transfer(oldBuffer [, newByteLength]);</code></pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code>oldBuffer</code></dt> + <dd>転送するための {{jsxref("ArrayBuffer")}} オブジェクト</dd> + <dt>newByteLength</dt> + <dd>新しい <code>ArrayBuffer</code> オブジェクトのバイト長</dd> +</dl> + +<h3 id="戻り値">戻り値</h3> + +<p>新しい <code>ArrayBuffer</code> オブジェクト。</p> + +<h2 id="説明">説明</h2> + +<p><code>ArrayBuffer.transfer()</code> メソッドによって、<code>ArrayBuffer</code> オブジェクトを成長し、デタッチできます。コピーなしで <code>ArrayBuffer</code> を成長される能力は大規模バッファに対してもっと早くなる利点を持っています。<code>ArrayBuffer</code> をデタッチする機能によって、基底メモリがリリースされるときを開発者が明示的に制御できます。これにより、すべての参照を削除し、ガベージコレクションを待たずに済みます。</p> + +<h2 id="例">例</h2> + +<pre class="brush: js">var buf1 = new ArrayBuffer(40); +new Int32Array(buf1)[0] = 42; + +var buf2 = ArrayBuffer.transfer(buf1, 80); +buf1.byteLength; // 0 +buf2.byteLength; // 80 +new Int32Array(buf2)[0]; // 42 + +var buf3 = ArrayBuffer.transfer(buf2, 0); +buf2.byteLength; // 0 +buf3.byteLength; // 0 +</pre> + +<h2 id="ポリフィル">ポリフィル</h2> + +<p>次のコードをスクリプトの先頭に挿入することで、transfer<font face="Consolas, Liberation Mono, Courier, monospace">()</font> の機能の大部分をネイティブにサポートしていない環境でも対処できるようになります。これはこの API と完全に同じではありませんが、この関数はある ArrayBuffer からそのほかの ArrayBuffer にデータを変換します。</p> + +<pre>if (!ArrayBuffer.transfer) { + ArrayBuffer.transfer = function(source, length) { + source = Object(source); + var dest = new ArrayBuffer(length); + if (!(source instanceof ArrayBuffer) || !(dest instanceof ArrayBuffer)) { + throw new TypeError('Source and destination must be ArrayBuffer instances'); + } + if (dest.byteLength >= source.byteLength) { + var nextOffset = 0; + var leftBytes = source.byteLength; + var wordSizes = [8, 4, 2, 1]; + wordSizes.forEach(function(_wordSize_) { + if (leftBytes >= _wordSize_) { + var done = transferWith(_wordSize_, source, dest, nextOffset, leftBytes); + nextOffset = done.nextOffset; + leftBytes = done.leftBytes; + } + }); + } + return dest; + function transferWith(wordSize, source, dest, nextOffset, leftBytes) { + var ViewClass = Uint8Array; + switch (wordSize) { + case 8: + ViewClass = Float64Array; + break; + case 4: + ViewClass = Float32Array; + break; + case 2: + ViewClass = Uint16Array; + break; + case 1: + ViewClass = Uint8Array; + break; + default: + ViewClass = Uint8Array; + break; + } + var view_source = new ViewClass(source, nextOffset, Math.trunc(leftBytes / wordSize)); + var view_dest = new ViewClass(dest, nextOffset, Math.trunc(leftBytes / wordSize)); + for (var i = 0; i < view_dest.length; i++) { + view_dest[i] = view_source[i]; + } + return { + nextOffset : view_source.byteOffset + view_source.byteLength, + leftBytes : source.byteLength - (view_source.byteOffset + view_source.byteLength) + } + } + }; +}</pre> + +<h2 id="仕様">仕様</h2> + +<p>いづれの現行仕様のドラフトにも含まれていませんが、ECMA-262 エディションの機能として<a href="https://gist.github.com/lukewagner/2735af7eea411e18cf20">提案</a><a href="https://esdiscuss.org/topic/sept-23-2014-meeting-notes">されました</a>。</p> + +<h2 id="ブラウザ実装状況">ブラウザ実装状況</h2> + + + +<p>{{Compat("javascript.builtins.ArrayBuffer.transfer")}}</p> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/docs/Web/JavaScript/Typed_arrays" title="en/JavaScript typed arrays">JavaScript typed arrays</a></li> +</ul> |