From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../arraybuffer/@@species/index.html | 64 +++++++++++ .../arraybuffer/arraybuffer/index.html | 82 ++++++++++++++ .../arraybuffer/bytelength/index.html | 56 +++++++++ .../global_objects/arraybuffer/index.html | 89 +++++++++++++++ .../global_objects/arraybuffer/isview/index.html | 80 +++++++++++++ .../global_objects/arraybuffer/slice/index.html | 77 +++++++++++++ .../global_objects/arraybuffer/transfer/index.html | 126 +++++++++++++++++++++ 7 files changed, 574 insertions(+) create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/@@species/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/arraybuffer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/isview/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/slice/index.html create mode 100644 files/ja/web/javascript/reference/global_objects/arraybuffer/transfer/index.html (limited to 'files/ja/web/javascript/reference/global_objects/arraybuffer') 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 +--- +
{{JSRef}}
+ +

ArrayBuffer[@@species] アクセサープロパティは、ArrayBuffer コンストラクターを返します。

+ +

解説

+ +

species アクセサープロパティは、既定のコンストラクターである ArrayBuffer オブジェクトを返します。サブクラスのコンストラクターはコンストラクターに代入することで、これをオーバーライドできます。

+ +

+ +

通常のオブジェクトの spicies

+ +

species プロパティは、ArrayBuffer オブジェクトの既定のコンストラクター関数である ArrayBuffer コンストラクターを返します。

+ +
ArrayBuffer[Symbol.species]; // ArrayBuffer() 関数
+ +

派生オブジェクトの spicies

+ +

派生コレクションオブジェクト (たとえば、独自の配列バッファーである MyArrayBuffer) では、MyArrayBuffer の species は MyArrayBuffer コンストラクターです。しかし、派生クラスのメソッドで、親である ArrayBuffer オブジェクトを返すためにこれをオーバーライドしたいかもしれません。

+ +
class MyArrayBuffer extends ArrayBuffer {
+  // MyArrayBuffer species を親である ArrayBuffer コンストラクタにオーバーライド。
+  static get [Symbol.species]() { return ArrayBuffer; }
+}
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}
+ +

ブラウザーの互換性

+ +
+ + +

{{Compat("javascript.builtins.ArrayBuffer.@@species")}}

+
+ +

関連情報

+ + 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 +--- +
{{JSRef}}
+ +

ArrayBuffer() コンストラクターは {{jsxref("ArrayBuffer")}} オブジェクトを生成するために使用されます。

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-constructor.html","shorter")}}
+ + + +

構文

+ +
new ArrayBuffer(length)
+
+ +

引数

+ +
+
length
+
作成する配列バッファーのサイズをバイト単位で指定します。
+
+ +

返値

+ +

指定されたサイズの新しい ArrayBuffer オブジェクト。その内容は 0 に初期化されます。

+ +

例外

+ +

{{jsxref("RangeError")}}: length が {{jsxref("Number.MAX_SAFE_INTEGER")}} よりも大きい (>= 2 ** 53) か、負の値であった場合。

+ +

互換性の注意

+ +

ECMAScript 2015 から、ArrayBuffer のコンストラクターは構築に {{jsxref("Operators/new", "new")}} 演算子が必要になりました。 new を指定せずに関数として ArrayBuffer コンストラクターを呼び出すと、 {{jsxref("TypeError")}} が発生するようになりました。

+ +
var dv = ArrayBuffer(10);
+// TypeError: calling a builtin ArrayBuffer constructor
+// without new is forbidden
+ +
var dv = new ArrayBuffer(10);
+ +

+ +

ArrayBuffer の作成

+ +

この例では、バッファーを参照する {{jsxref("Global_Objects/Int32Array", "Int32Array")}} ビューを持つ 8 バイトのバッファーを作成しています。

+ +
var buffer = new ArrayBuffer(8);
+var view   = new Int32Array(buffer);
+ +

仕様書

+ + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.ArrayBuffer")}}

+ +

関連情報

+ + 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 +--- +
{{JSRef}}
+ +

byteLength アクセサープロパティは、{{jsxref("ArrayBuffer")}} の長さをバイト単位で表します。

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-bytelength.html")}}
+ + + +

解説

+ +

byteLength プロパティはアクセサープロパティで、 set アクセサー関数が undefined、つまりこのプロパティは読み取り専用です。値は配列が構築されるときに設定され、変更することができません。この ArrayBuffer が取り外された場合、このプロパティは 0 を返します。

+ +

+ +

byteLength の使用

+ +
var buffer = new ArrayBuffer(8);
+buffer.byteLength; // 8
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.byteLength")}}

+ +

関連情報

+ + 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 +--- +
{{JSRef}}
+ +

ArrayBuffer オブジェクトは、一般的な固定長の生のバイナリデータバッファを表現するために使用されます。

+ +

ArrayBuffer はバイトの配列で、他の言語では「バイト配列」と呼ばれることが多いです。ArrayBuffer の内容を直接操作することはできません。代わりに、型付きの配列オブジェクトか {{jsxref("DataView")}} オブジェクトのいずれかを作成して、バッファを特定の形式で表現し、バッファの内容を読み書きするためにそれを使用します。

+ +

ArrayBuffer() コンストラクタは、指定した長さの ArrayBuffer をバイト単位で作成します。Base64 文字列ローカルファイルなどの既存のデータから配列バッファを取得することもできます。

+ +

コンストラクタ

+ +
+
{{jsxref("ArrayBuffer.ArrayBuffer", "ArrayBuffer()")}}
+
新しい ArrayBuffer オブジェクトを作成します。
+
+ +

静的プロパティ

+ +
+
{{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}}
+
派生オブジェクトを作成する際に使用するコンストラクタ関数です。
+
+ +

静的メソッド

+ +
+
{{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(arg)")}}
+
arg型付き配列オブジェクトや {{jsxref("DataView")}} のような ArrayBuffer ビューのいずれかである場合に true を返します。それ以外の場合は false を返します。
+
+ +

インスタンスプロパティ

+ +
+
{{jsxref("ArrayBuffer.prototype.byteLength")}}
+
ArrayBuffer の読み取り専用サイズ (バイト単位)。これは配列が構築されたときに設定され、変更することはできません。
+
+ +

インスタンスメソッド

+ +
+
{{jsxref("ArrayBuffer.prototype.slice()")}}
+
ArrayBuffer のバイト数のコピーであり、その内容は、begin (含む) から end (排他的) までのバイト数である。begin または end のどちらかが負の値の場合は、配列の先頭からではなく、配列の末尾からのインデックスを指します。
+
+ +

+ +

ArrayBuffer の作成

+ +

この例では、バッファを参照する {{jsxref("Int32Array")}} ビューを持つ 8 バイトバッファを作成します。

+ +
const buffer = new ArrayBuffer(8);
+const view = new Int32Array(buffer);
+ +

仕様

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-arraybuffer-objects', 'ArrayBuffer')}}
+ +

ブラウザー実装状況

+ + + +

{{Compat("javascript.builtins.ArrayBuffer")}}

+ +

あわせて参照

+ + 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 +--- +
{{JSRef}}
+ +

ArrayBuffer.isView() メソッドは、渡された値が ArrayBuffer のビューのうちの一つ、例えば型付き配列オブジェクトや {{jsxref("DataView")}} であるかどうかを判断します。

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-isview.html","shorter")}}
+ + + +

構文

+ +
ArrayBuffer.isView(value)
+ +

引数

+ +
+
value
+
チェックする値です。
+
+ +

返値

+ +

渡された引数が {{jsxref("ArrayBuffer")}} のビューのうちの一つであれば true を、そうでなければ false を返します。

+ +

+ +

isView の使用

+ +
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
+
+ +

仕様書

+ + + + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.isView")}}

+ +

関連情報

+ + 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 +--- +
{{JSRef}}
+ +

slice() メソッドは新しい ArrayBuffer を返し、その中にこの ArrayBufferbegin から end の手前までをコピーします。

+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-slice.html")}}
+ + + +

構文

+ +
arraybuffer.slice(begin[, end])
+ +

引数

+ +
+
begin
+
スライスの起点を表すゼロ基点のバイトインデックスです。
+
+ +
+
end {{optional_inline}}
+
スライスをその前で終了するバイトインデックスです。 end が指定されなかった場合は、新しい ArrayBuffer は、この ArrayBuffer の起点から終点まですべてのバイトを含みます。
+
+ +

返値

+ +

新しい {{jsxref("ArrayBuffer")}} オブジェクト。

+ +

解説

+ +

slice() メソッドは、 end 引数で指定されたバイトの手前までコピーを行います。 begin または end のどちらかが負の数の場合、開始位置とは反対に、配列の末尾からのインデックスを参照します。

+ +

begin および end 引数で指定された範囲は、現在の配列で妥当なインデックスの範囲に丸められます。新しい ArrayBuffer の計算された長さが負の数であった場合、ゼロに丸められます。

+ +

+ +

ArrayBuffer のコピー

+ +
const buf1 = new ArrayBuffer(8);
+const buf2 = buf1.slice(0);
+
+ +

仕様書

+ + + + + + + + + + +
仕様書
{{SpecName('ESDraft', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}
+ +

ブラウザーの互換性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.slice")}}

+ +

関連情報

+ + 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 +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

静的な ArrayBuffer.transfer() メソッドは、oldBuffer のデータから得られる内容の新しい ArrayBuffer を返し、newByteLength によって切断されるかゼロ拡張されます。newByteLengthundefined なら、oldBufferbyteLength が使われます。この操作により oldBuffer はデタッチ状態のままになります。

+ +

構文

+ +
ArrayBuffer.transfer(oldBuffer [, newByteLength]);
+ +

引数

+ +
+
oldBuffer
+
転送するための {{jsxref("ArrayBuffer")}} オブジェクト
+
newByteLength
+
新しい ArrayBuffer オブジェクトのバイト長
+
+ +

戻り値

+ +

新しい ArrayBuffer オブジェクト。

+ +

説明

+ +

ArrayBuffer.transfer() メソッドによって、ArrayBuffer オブジェクトを成長し、デタッチできます。コピーなしで ArrayBuffer を成長される能力は大規模バッファに対してもっと早くなる利点を持っています。ArrayBuffer をデタッチする機能によって、基底メモリがリリースされるときを開発者が明示的に制御できます。これにより、すべての参照を削除し、ガベージコレクションを待たずに済みます。

+ +

+ +
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
+
+ +

ポリフィル

+ +

次のコードをスクリプトの先頭に挿入することで、transfer() の機能の大部分をネイティブにサポートしていない環境でも対処できるようになります。これはこの API と完全に同じではありませんが、この関数はある ArrayBuffer からそのほかの ArrayBuffer にデータを変換します。

+ +
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)
+            }
+        }
+    };
+}
+ +

仕様

+ +

いづれの現行仕様のドラフトにも含まれていませんが、ECMA-262 エディションの機能として提案されました

+ +

ブラウザ実装状況

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.transfer")}}

+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf