JavaScript

TypedArray オブジェクト

 編集:2022.08.09 by T.A.

TypedArray オブジェクトは、背後にあるバイナリー データ バッファーの、配列状のビューを表します。TypedArray という名称のグローバル プロパティはなく、また直接 TypedArray コンストラクターが見えるわけではありません。代わりに、さまざまなグローバル プロパティがあり、それらの値は後述するように特定の要素の型における型付き配列のコンストラクターになります。下記のページで、それぞれの要素を持つ片引き配列で使用できる共通のプロパティやメソッドを確認できます。

¶省く

TypedArray オブジェクト:

値の範囲 サイズ(バイト数) 説明 Web IDL 型 同等の C 型
Int8Array -128 ~ 127 1 8 ビット長、2 の補数方式の符号付き整数値 byte int8_t
Uint8Array 0 ~ 255 1 8 ビット長、符号なし整数値 octet uint8_t
Uint8ClampedArray 0 ~ 255 1 8 ビット長、符号なし整数値(切り詰め) octet uint8_t
Int16Array -32768 ~ 32767 2 16 ビット長、2 の補数方式の符号付き整数値 short int16_t
Uint16Array 0 ~ 65535 2 16 ビット長、符号なし整数値 unsigned short uint16_t
Int32Array -2147483648 ~ 2147483647 4 32 ビット長、2 の補数方式の符号付き整数値 long int32_t
Uint32Array 0 ~ 4294967295 4 32 ビット長、符号なし整数値 unsigned long uint32_t
Float32Array 1.2×10-38 ~ 3.4×1038 4 32 ビット長 IEEE 方式 浮動小数点数(有効桁数 7 桁、例えば 1.234567) unrestricted float float
Float64Array 5.0×10-324 ~ 1.8×10308 8 64 ビット長 IEEE 方式 浮動小数点数(有効桁数 16 桁、例えば1.23456789012345) unrestricted double double
BigInt64Array -263 ~ 263-1 8 64 ビット長、2 の補数方式の符号付き整数値 bigint int64_t(signed long long)
BigUint64Array 0 ~ 264-1 8 64 ビット長、符号なし整数値 bigint uint64_t(unsigned long long)
コンストラクター

このオブジェクトは直接インスタンス化することはできません。その代わりに、特定の方の配列、例えば Int8Array や BigInt64Array のインスタンスを生成することができます。

これらのオブジェクトのコンストラクターの構文はすべて共通です。

バッファーとしてだけ:

new TypedArray();

指定数分:

new TypedArray(length);
length これを付加して呼び出すと、lengthBYTES_PER_ELEMENT を掛けた値 のバイト数の、値 0 を持つ内部配列バッファーをメモリー内に生成します。

TypedArrayを指定して:

new TypedArray(typedArray);
typedArray typedArray 引数で、任意の型付き配列型(Int32Array など)のオブジェクトを示す引数を渡して呼び出すと、typedArray を新たな型付き配列にコピーします。typedArray 内の各値は、新しい配列へコピーされる前に対応する型へ変換されます。新しい型付き配列オブジェクトの長さは、引数 typedArray の長さと同じです。

new TypedArray(object);
object これを付加して呼び出すと、TypedArray.from() メソッドを使用したかのように新たな型付き配列を生成します。

new TypedArray(buffer[, byteOffset[, length]]);
buffer
byteOffset省略可
length省略可
これらを付加して呼び出すと、指定した ArrayBuffer のビューになる新たな型付き配列を生成します。

引数 byteOffset および length は、型付き配列ビューで公開するメモリー範囲を指定します。両方とも省略すると、buffer のすべてを公開します。length のみ省略すると、buffer の残りの部分を公開します。

静的プロパティ
TypedArray.BYTES_PER_ELEMENT
さまざまな TypedArray オブジェクトの要素のサイズを数値で返します。
TypedArray.name
コンストラクター名を文字列値で返します(例: "Int8Array")。
get TypedArray[@@species]
派生オブジェクトを生成するために使用するコンストラクター関数です。
TypedArray.prototype
TypedArray オブジェクトのプロトタイプです。
静的メソッド
TypedArray.from()
配列状のオブジェクトや反復可能なオブジェクトから、新たな TypedArray を生成します。Array.from() もご覧ください。
TypedArray.of()
引数に与えた値をもとに、新たな TypedArray を生成します。Array.of() もご覧ください。
インスタンス プロパティ
TypedArray.buffer
この型付き配列によって参照さている ArrayBuffer を返します。構築時に設定され、読取専用です。
TypedArray.byteLength
型付き配列の長さを(バイト単位で)返します。構築時に設定され、読取専用です。
TypedArray.prototype.byteOffset
型付き配列の ArrayBuffer の先頭からのオフセットを(バイト単位で)返します。構築時に設定され、読取専用です。
TypedArray.length
型付き配列内に保持された要素の数を返します。構築時に設定され、読取専用です。
インスタンスメソッド
TypedArray.copyWithin()
配列内で一連の配列要素をコピーします。Array.prototype.copyWithin() も参照してください。
TypedArray.entries()
配列内のすべての位置に対するキー/値の組を含む、新しい配列イテレーターを返します。Array.prototype.entries() も参照してください。
TypedArray.every()
配列内のすべての要素が関数によって提供されたテストに合格するかどうかテストを実行します。Array.prototype.every() も参照してください。
TypedArray.fill()
開始位置から終了位置までのすべての要素に固定値を設定します。Array.prototype.fill() も参照してください。
TypedArray.filter()
与えられたフィルタリング関数が true を返す配列のすべての要素をもつ新しい配列を生成します。Array.prototype.filter() も参照してください。
TypedArray.find()
配列要素が与えられたテスト関数を満足したら、配列の値を返します。満足しなかった場合、undefined を返します。Array.prototype.find() も参照してください。
TypedArray.findIndex()
配列要素が与えられたテスト関数を満足したら、配列のインデックスを返します。満足しなかった場合は -1 を返します。Array.prototype.findIndex() も参照してください。
TypedArray.forEach()
配列内の各要素に対する関数を呼び出します。Array.prototype.forEach() も参照してください。
TypedArray.includes()
型付き配列にある要素が含まれているかどうか判断し、それに応じて true または false を返します。Array.prototype.includes() も参照してください。
TypedArray.indexOf()
指定された値に等しい配列内の要素の最初の位置を返します。見つからなかった場合は -1 を返します。Array.prototype.indexOf() も参照してください。
TypedArray.join()
すべての配列要素を1つの文字列に結合します。Array.prototype.join() も参照してください。
TypedArray.keys()
配列内のそれぞれの位置に対するキーを含む新しい配列イテレーターを返します。Array.prototype.keys() も参照してください。
TypedArray.lastIndexOf()
指定された値と等しい配列の要素の最後の位置を返します。見つからない場合は -1 を返します。Array.prototype.lastIndexOf() を確かめて下さい。
TypedArray.map()
この配列のすべての要素で与えられた関数を呼び出した結果をもつ新しい配列を生成します。Array.prototype.map() も参照してください。
TypedArray.reduce()
アキュームレーターと配列のそれぞれの値(左から右へ)に対して関数を適用し、単一の値にまで縮小します。Array.prototype.reduce() も参照してください。
TypedArray.reduceRight()
アキュームレーターと配列のそれぞれの値(右から左へ)に対して関数を適用し、単一の値にまで縮小します。Array.prototype.reduce() も参照してください。
TypedArray.reverse()
配列要素の順番を反転させます。― 最初の要素は最後になり、最後の要素は最初になります。Array.prototype.reverse() も参照してください。
TypedArray.set()
入力値を指定した配列から読み込み、型付き配列内に複数の値を格納します。
TypedArray.slice()
配列の一部を取り出して新しい配列を返します。Array.prototype.slice() も参照してください。
TypedArray.some()
ある配列の少なくとも 1 つの要素が与えられたテスト関数を満たした場合に true を返します。Array.prototype.some() も参照してください。
TypedArray.sort()
配列の要素をソートし、その結果を返します。Array.prototype.sort() も参照してください。
TypedArray.subarray()
与えられた開始位置と終了位置の要素インデックスから、新しい TypedArray を返します。
TypedArray.values()
配列内のそれぞれの位置に対する値を含む新しい配列イテレーター オブジェクトを返します。Array.prototype.values() も参照してください。
TypedArray.toLocaleString()
配列と要素を表すローカライズされた文字列を返します。Array.prototype.toLocaleString() も参照してください。
TypedArray.toString()
配列と要素を表す文字列を返します。Array.prototype.toString() も参照してください。
TypedArray.prototype[@@iterator]()
配列内でそれぞれの位置に対する値を含む新しい配列イテレーター オブジェクトを返します。

¶省く

プロパティへのアクセス

配列内の要素は、標準の配列の添字構文(すなわち、かぎ括弧「[ ]」を使用する表記)を使用して参照することができます。しかし、型付き配列で添字付きプロパティで取得または設定するときは、範囲外の添字でもプロパティのプロトタイプ チェーンを探索しません。添字付きプロパティは ArrayBuffer を調べるのであり、オブジェクトのプロパティは探索しません。他のオブジェクト同様に、名前付きプロパティは使用できます。

// 標準的な配列構文を使用して設定および取得
var int16 = new Int16Array(2);
int16[0] = 42;
D=int16[0]; //=42

// 名前付きプロパティが許可されています。でも(Fx 30)
Int8Array.prototype.foo = 'bar';
D=(new Int8Array(32)).foo; //="bar"
// プロトタイプで添字付き配列を使用しても探索しない(Fx 25)
Int8Array.prototype[20] = 'foo';
D=(new Int8Array(32))[20]; //=0

// 圏外でも
Int8Array.prototype[20] = 'foo';
D=(new Int8Array(8))[20]; //=undefined

// または負の整数の添え字
Int8Array.prototype[-1] = 'foo';
D=(new Int8Array(8))[-1]; //=undefined
A=new Int8Array();
A[3]=10;
D=A;    //=。なにもない[object]
D=A[3]; //=undefined
A=new Int8Array(5);
D=A; //=[0, 0, 0, 0, 0]
A[3]=10;
D=A;    //=[0, 0, 0, 10, 0]
D=A[3]; //=10
A[3]=300;
D=A[3]; //=44。300→12c(16進)、2c→44(10進)
A=new Int8Array(4);
A16=new Int16Array(A);
A16[2]=300;
D=A16; //=[0, 0, 300, 0]

A=new Int8Array(4);
A[2]=10;
A16=new Int16Array(A);
D=A16;    //=[0, 0, 10, 0]
A16[2]=300;
D=A16;    //=[0, 0, 300, 0]
A=new Int8Array([10,20,30,40]);
D=A; //=[10, 20, 30, 40]
A=[10, 20, 30, 40];
A16=new Int16Array(A, 1);
D=A16; //=[10, 20, 30, 40]。¶意味あるのだろうか
A16[0]=300;
D=A16; //=[300, 20, 30, 40]
A=new ArrayBuffer(4);
A16=new Int16Array(A, 1); //エラー発生。new TypedArray(buffer[, byteOffset[, length]]) 構文ではないのだろうか?
D=A16;
A=new Array(4);
A[0]=10;
A16=new Int16Array(A,1);
D=A16; //=[10, 0, 0, 0]

テスト