TypedArray オブジェクトは背後にある バイナリーデータバッファー の、配列状のビューを表します。TypedArray という名称のグローバルプロパティはなく、また直接的に見える TypedArray コンストラクターもありません。代わりにさまざまなグローバルプロパティがいくつかあり、それらの値は後述するように特定の要素タイプの Typed Array コンストラクターになります。それぞれのページで、各種の要素を持つ Typed Array で使用できる共通的なプロパティやメソッドを確認できます。
構文
new TypedArray(length); new TypedArray(typedArray); new TypedArray(object); new TypedArray(buffer [, byteOffset [, length]]); where TypedArray() is one of: Int8Array(); Uint8Array(); Uint8ClampedArray(); Int16Array(); Uint16Array(); Int32Array(); Uint32Array(); Float32Array(); Float64Array();
引数
- length
- 引数
lengthを付加して呼び出すと、length に BYTES_PER_ELEMENT を掛けた値 のバイト数の、値 0 を持つ内部配列バッファーをメモリー内に生成します。 - typedArray
- 任意の Typed Array 型 (
Int32Arrayなど) のオブジェクトを示す引数typedArrayを付加して呼び出すと、typedArrayを新たな Typed Array にコピーします。typedArray内の各値は、新しい配列へコピーされる前に対応する型へ変換されます。新しい typedArray オブジェクトの length は、引数 typedArray の length と同じです。 - object
- 引数
objectを付加して呼び出すと、TypedArray.from()メソッドを使用したかのように新たな Typed Array を生成します。 - buffer, byteOffset, length
- 引数
buffer、byteOffset(省略可)、length(省略可) を付加して呼び出すと、指定したArrayBufferのビューになる新たな Typed Array を生成します。引数byteOffsetおよびlengthは、Typed Array ビューで公開するメモリー範囲を指定します。両方とも省略すると、bufferのすべてを公開します。lengthのみ省略すると、bufferの残りの部分を公開します。
説明
ECMAScript 2015 では TypedArray コンストラクターを、すべての TypedArray コンストラクターの [[Prototype]] と定義しています。このコンストラクターは直接公開されてはいません。グローバルな %TypedArray% または TypedArray プロパティは存在しません。Object.getPrototypeOf(Int8Array) などの形式でのみ直接アクセスできます。すべての TypedArray 系コンストラクターは、共通的なプロパティを %TypedArray% コンストラクター関数から継承します。またすべての Typed Array プロトタイプ (TypedArray.prototype) は、自身の [[Prototype]] として %TypedArray%.prototype を持ちます。
%TypedArray% コンストラクター自体は、特に役立つものではありません。サブクラス化をサポートする JS エンジンでオブジェクトを生成する際に使用する場合を除き、コンストラクターを呼び出すか new 構文を使用すると TypeError が発生します。現在はそのようなエンジンがありませんので、%TypedArray% はすべての TypedArray コンストラクターへのポリフィル関数およびプロパティとしてのみ有用です。
TypedArray のインスタンス (すなわち、Int8Array などのインスタンス) を生成するとき、配列バッファーはメモリーの内部に生成されます (コンストラクターの引数として ArrayBuffer オブジェクトが提供されて、配列バッファーによって使用される場合)。また、このバッファーのアドレスはインスタンスの内部プロパティとして保存され、%TypedArray%.prototype のすべてのメソッドは、値の設定や取得などの操作で配列バッファーのアドレスを使用します。
プロパティへのアクセス
標準的な配列の添え字構文 (括弧を使用する表記) を使用して、配列の要素を参照できます。しかし Typed Array の添え字付きプロパティで値を取得または設定するときは、範囲外の添え字でもプロパティのプロトタイプチェーンを探索しません。添え字付きプロパティは ArrayBuffer を調べるのであり、オブジェクトのプロパティは探索しません。他のオブジェクト同様に、名前付きプロパティは使用できます。
// 標準的な配列構文を使用して設定および取得 var int16 = new Int16Array(2); int16[0] = 42; console.log(int16[0]); // 42 // プロトタイプで添え字付き配列を使用しても探索しない (Fx 25) Int8Array.prototype[20] = 'foo'; (new Int8Array(32))[20]; // 0 // even when out of bound Int8Array.prototype[20] = 'foo'; (new Int8Array(8))[20]; // undefined // or with negative integers Int8Array.prototype[-1] = 'foo'; (new Int8Array(8))[-1]; // undefined // Named properties are allowed, though (Fx 30) Int8Array.prototype.foo = 'bar'; (new Int8Array(32)).foo; // "bar"
TypedArray オブジェクト
| 型 | サイズ (バイト数) | 説明 | Web IDL 型 | 同等の C 型 |
Int8Array |
1 | 8 ビット長、2 の補数方式の符号付き整数値 | byte |
int8_t |
Uint8Array |
1 | 8 ビット長、符号なし整数値 | octet |
uint8_t |
Uint8ClampedArray |
1 | 8 ビット長、符号なし整数値 (切り詰め) | octet |
uint8_t |
Int16Array |
2 | 16 ビット長、2 の補数方式の符号付き整数値 | short |
int16_t |
Uint16Array |
2 | 16 ビット長、符号なし整数値 | unsigned short |
uint16_t |
Int32Array |
4 | 32 ビット長、2 の補数方式の符号付き整数値 | long |
int32_t |
Uint32Array |
4 | 32 ビット長、符号なし整数値 | unsigned long |
uint32_t |
Float32Array |
4 | 32 ビット長、IEEE 方式 浮動小数点数 | unrestricted float |
float |
Float64Array |
8 | 64 ビット長、IEEE 方式 浮動小数点数 | unrestricted double |
double |
プロパティ
TypedArray.BYTES_PER_ELEMENT- さまざまな Typed Array オブジェクトの、要素のサイズを数値で返します。
- TypedArray.length
- 値は 0 になります。
TypedArray.name- コンストラクター名を文字列値で返します。例: "Int8Array"
get TypedArray[@@species]- 派生オブジェクトを生成するために使用するコンストラクター関数です。
TypedArray.prototype- TypedArray オブジェクトのプロトタイプです。
メソッド
TypedArray.from()- 配列状のオブジェクトやイテレート可能なオブジェクトから、新たな Typed Array を生成します。
Array.from()もご覧ください。 TypedArray.of()- 引数に与えた値をもとに、新たな Typed Array を生成します。
Array.of()もご覧ください。
TypedArray プロトタイプ
すべての TypedArray は、TypedArray.prototype から継承します。
プロパティ
TypedArray.prototype.constructor- インスタンスのプロトタイプを作る関数を返します。これは、デフォルトで対応するtyped array type関数です。
TypedArray.prototype.buffer読取専用- typed arrayによって参照される
ArrayBufferを返します。構築時に設定され、読取専用となります。 TypedArray.prototype.byteLength読取専用ArrayBufferの開始位置からのtyped arrayの(バイト単位の)長さを返します。構築時に設定され、読取専用となります。TypedArray.prototype.byteOffset読取専用ArrayBufferの開始位置からのtyped arrayの(バイト単位の)オフセットを返します。構築時に設定され、読取専用となります。TypedArray.prototype.length読取専用- typed array内に保持された要素の数を返します。構築時に設定され、読取専用となります。
メソッド
TypedArray.prototype.copyWithin()- 配列内で一連の配列要素をコピーします。
Array.prototype.copyWithin()も確かめて下さい。 TypedArray.prototype.entries()- 配列内で各インデックスに対して、キー/バリュー ペアを含む新しい
Array Iteratorを返します。Array.prototype.entries()も確かめて下さい。 TypedArray.prototype.every()- 配列内のすべての要素が関数によって提供されたテストに合格するかどうかテストを実行します。
Array.prototype.every()も確かめて下さい。 TypedArray.prototype.fill()- 開始位置から終了位置までの配列のすべての要素を固定値で設定します。
Array.prototype.fill()も確かめて下さい。 TypedArray.prototype.filter()- 与えられたフィルタリング関数がtrueを返す配列のすべての要素をもつ新しい配列を生成します。
Array.prototype.filter()も確かめて下さい。 TypedArray.prototype.find()- 配列要素が与えられたテスト関数を満足したら、配列の値を返します。満足しなかった場合、
undefinedを返します。Array.prototype.find()を確かめて下さい。 TypedArray.prototype.findIndex()- 配列要素が与えられたテスト関数を満足したら、配列のインデックスを返します。満足しなかった場合、-1を返します。
Array.prototype.findIndex()も確かめて下さい。 TypedArray.prototype.forEach()- 配列内の各要素に対する関数を呼び出します。
Array.prototype.forEach()も確かめて下さい。 TypedArray.prototype.includes()- typed arrayがある要素を含むかどうか判断し、それに応じて、
trueかfalseを返します。Array.prototype.includes()も確かめて下さい。 TypedArray.prototype.indexOf()- 指定された値に等しい配列内の要素の最初のインデックスを返します。見つからない場合、-1を返します。
Array.prototype.indexOf()も確かめて下さい。 TypedArray.prototype.join()- すべての配列要素を文字列に結合します。
Array.prototype.join()も確かめて下さい。 TypedArray.prototype.keys()- 配列内の各インデックスに対するキーを含む新しい
Array Iteratorを返します。Array.prototype.keys()も確かめて下さい。 TypedArray.prototype.lastIndexOf()- 指定された値と等しい配列の要素の最後のインデックスを返します。見つからない場合、-1を返します。
Array.prototype.lastIndexOf()を確かめて下さい。 TypedArray.prototype.map()- この配列のすべての要素で与えられた関数を呼び出した結果をもつ新しい配列を生成します。
Array.prototype.map()も確かめて下さい。 TypedArray.prototype.move()未実装TypedArray.prototype.copyWithin()の以前の非標準バージョンTypedArray.prototype.reduce()- アキュムレータに対して関数を適用し、隣り合う二つのtyped arrayの要素(左から右へ)は単一の値になります。
Array.prototype.reduce()も確かめて下さい。 TypedArray.prototype.reduceRight()- アキュムレータに対して関数を適用し、隣り合う二つのtyped arrayの要素(右から左へ)は単一の値になります。
Array.prototype.reduceRight()を確かめて下さい。 TypedArray.prototype.reverse()- 配列要素の順番を反転させます。— 最初の要素は最後になり、最後の要素は最初になります。
Array.prototype.reverse()も確かめて下さい。 TypedArray.prototype.set()- 入力値を指定した配列から読み込み、typed array内に複数の値を格納します。
TypedArray.prototype.slice()- 配列の一部を取り出して新しい配列を返します。
Array.prototype.slice()も確かめて下さい。 TypedArray.prototype.some()- ある配列の少なくとも 1 つの要素が与えられたテスト関数を満たした場合にtrueを返します。
Array.prototype.some()も確かめて下さい。 TypedArray.prototype.sort()- 配列の要素をソートし、その結果を返します。
Array.prototype.sort()も確かめて下さい。 TypedArray.prototype.subarray()- 与えられた開始位置と終了位置の要素インデックスの新しいTypedArrayを返します。
TypedArray.prototype.values()- 配列内で各インデックスに対する値を含む新しい
Array Iteratorオブジェクトを返します。Array.prototype.values()を確かめて下さい。 TypedArray.prototype.toLocaleString()- 配列と要素を表すローカライズされた文字列を返します。
Array.prototype.toLocaleString()も確かめて下さい。 TypedArray.prototype.toString()- 配列と要素を表す文字列を返します。
Array.prototype.toString()も確かめて下さい。 TypedArray.prototype[@@iterator]()- 配列内で各インデックスに対する値を含む新しい
Array Iteratorオブジェクトを返します。
仕様
| 仕様書 | 策定状況 | コメント |
|---|---|---|
| Typed Array Specification | 廃止された | Typed Array のビューを TypedArray および ArrayBufferView として定義。ECMAScript 2015 で置き換えられました。 |
| ECMAScript 2015 (6th Edition, ECMA-262) TypedArray Objects の定義 |
標準 | ECMA 標準では最初の定義。添え字付きプロパティおよび名前付きプロパティの動作を定義。new を必須とする。 |
| ECMAScript Latest Draft (ECMA-262) TypedArray Objects の定義 |
ドラフト |
ブラウザー実装状況
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| 基本サポート | 7.0 | 4.0 (2) | 10 | 11.6 | 5.1 |
| 添え字付きプロパティでプロトタイプを探索しない | (有) [1] | 25 (25) | ? | ? | ? |
| 名前付きプロパティ | (有) | 30 (30) | ? | ? | ? |
new が必須 |
? | 44 (44) | ? | ? | ? |
| コンストラクターでイテレート可能 | ? | 52 (52) | ? | ? | ? |
| 機能 | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Android 版 Chrome |
|---|---|---|---|---|---|---|---|
| 基本サポート | 4.0 | (有) | 4.0 (2) | 10 | 11.6 | 4.2 | (有) |
| 添え字付きプロパティでプロトタイプを探索しない | ? | (有) [1] | 25.0 (25) | ? | ? | ? | (有) [1] |
| 名前付きプロパティ | ? | (有) | 30.0 (30) | ? | ? | ? | ? |
new が必須 |
? | ? | 44.0 (44) | ? | ? | ? | ? |
| コンストラクターでイテレート可能 | ? | ? | 52.0 (52) | ? | ? | ? | ? |
[1] -1 といった値は添え字付きプロパティとして扱いませんので、プロトタイププロパティの値を返します。
互換性情報
ECMAScript 2015 より、TypedArray コンストラクターは new 演算子を使用しなければなりません。new を伴わずに TypedArray コンストラクターを関数として呼び出すと、TypeError が発生するようになりました。
var dv = Int8Array([1, 2, 3]); // TypeError: calling a builtin Int8Array constructor // without new is forbidden
var dv = new Int8Array([1, 2, 3]);