new %TypedArray%【コンストラクタ】
from【配列生成 (オブジェクト指定)】
of【配列生成 (要素指定)】
new %TypedArray%【コンストラクタ】
メモ
概要
- ArrayBuffer【バイナリデータ配列】のビューを作成
- 実装は、%TypedArray%【型指定配列ビュー】参照
- 構文 (5) で同一の実体 (ArrayBuffer【バイナリデータ配列】) を指定すると、複数のビューから参照可
- 既存の %TypedArray%【型指定配列ビュー】の bufferプロパティを指定しても同様
関連
外部リンク
- ECMA-262 (英語)
The TypedArray Constructors ES2024 (15) ES2023 (14) ES2022 (13)
構文
(1) 要素なし
new %TypedArray%( )
TypeError new なし
(2) 要素数指定
new %TypedArray%( length )
length 要素数
TypeError new なし
(3) ビュー指定 (コピー)
new %TypedArray%( typedArray )
typedArray 任意の ~Array【型指定配列ビュー (%TypedArray%)】オブジェクト
TypeError new なし
(4) オブジェクト指定
new %TypedArray%( object )
object 配列オブジェクト・反復オブジェクト 等
TypeError new なし
(5) 実体指定
new %TypedArray%( buffer [ , byteOffset [ , length ] ] )
buffer ArrayBuffer【バイナリデータ配列】
byteOffset バイト単位オフセット (省略:0 先頭)
length 要素数 (省略:末尾まで)
TypeError new なし
RangeError 指定範囲がbufferの領域外
byteOffset < 0
byteOffset がデータサイズの倍数以外
lengthの省略時、bufferに指定された ArrayBuffer【バイナリデータ配列】のサイズがデータサイズの倍数以外
lengthの省略時、byteOffsetが ArrayBuffer【バイナリデータ配列】のサイズ以上
lengthが指定され、byteOffsetから length数分の配列が ArrayBuffer【バイナリデータ配列】のサイズより大きい
例
// 構文 (1)
var typedArray_1 = new Int32Array();
console.log(typedArray_1.length);
// 出力:0
console.log(typedArray_1);
// 出力:[]
// 構文 (2)
var typedArray_2 = new Int32Array(5);
console.log(typedArray_2.length);
// 出力:5
console.log(typedArray_2);
// 出力:[0, 0, 0, 0, 0]
// 構文 (3)
var typedArray_30 = new Int32Array([ 1, 2, 3 ]);
var typedArray_31 = new Int32Array(typedArray_30);
console.log(typedArray_30 === typedArray_31);
// 出力:false 別のビュー
console.log(typedArray_30.buffer === typedArray_31.buffer);
// 出力:false 別の実体 (コピー)
typedArray_30[0] = 10;
console.log(typedArray_30);
// 出力:[10, 2, 3]
console.log(typedArray_31);
// 出力:[1, 2, 3]
// 構文 (4)
var array = [ 1, 2, 3 ];
var typedArray_4 = new Int32Array(array);
console.log(typedArray_4.length);
// 出力:3
console.log(typedArray_4);
// 出力:[1, 2, 3]
// 構文 (5-1)
var arrayBuffer = new ArrayBuffer(4 * 3);
var typedArray_50 = new Int32Array(arrayBuffer);
var typedArray_51 = new Int32Array(arrayBuffer);
console.log(typedArray_50 === typedArray_51);
// 出力:false 別のビュー
console.log(typedArray_50.buffer === typedArray_51.buffer);
// 出力:true 同一実体
typedArray_50[0] = 10;
console.log(typedArray_50);
// 出力:[10, 0, 0]
console.log(typedArray_51);
// 出力:[10, 0, 0]
// 構文 (5-2)
var typedArray_52 = new Int32Array([ 1, 2, 3 ]);
console.log(typedArray_52.BYTES_PER_ELEMENT);
// 出力:4
// ビューの実体を指定
var typedArray_53 = new Int32Array(typedArray_52.buffer, typedArray_52.BYTES_PER_ELEMENT, 2);
console.log(typedArray_53);
// 出力:[2, 3]
console.log(typedArray_52 === typedArray_53);
// 出力:false 別のビュー
console.log(typedArray_52.buffer === typedArray_53.buffer);
// 出力:true 同一実体
typedArray_53[0] = 20;
console.log(typedArray_53);
// 出力:[20, 3]
console.log(typedArray_52);
// 出力:[1, 20, 3]
%TypedArray%.from【配列生成 (オブジェクト指定)】
メモ
概要
- 配列形式オブジェクト・イテラブル オブジェクト から %TypedArray%【型指定配列ビュー】オブジェクト を生成
- 元のオブジェクトは変更なし
- マッピング関数を指定して、要素値の変換が可能
関連
外部リンク
- ECMA-262 (英語)
%TypedArray%.from ( source [ , mapfn [ , thisArg ] ] ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
%TypedArray%.from( items[, mapfn[, thisArg]] )
%TypedArray%【型指定配列ビュー】オブジェクト
items元になるオブジェクト (下記のオブジェクトが有効)
配列形式オブジェクト (関数のarguments【引数リスト】 等)
イテラブル オブジェクト (%TypedArray%【型指定配列ビュー】・Map【マップ】 等)
mapfnマッピング関数 (詳細は下記参照)
thisArgマッピング関数内で this で参照されるオブジェクト
TypeError 例外
itemsが不正
mapfnが呼び出し不可
マッピング関数 引数名 (例) | 備考 |
---|---|
value | 要素値 |
index | 要素インデックス |
戻り値型 | 備考 |
該当型 | 新しい配列の要素値 |
例
function funcMap(value, index) {
return index * 100 + value;
}
function funcMap2(value, index) {
return this + index * 100 + value;
}
function funcArguments(p1, p2, p3) {
return Int32Array.from(arguments);
}
// Array【配列】
const array = [ 1, 2, 3, 4, 5 ];
let typedArray = Int32Array.from(array);
console.log(typedArray);
// 出力:Int32Array(5) [1, 2, 3, 4, 5, (省略) ]
typedArray = Int32Array.from(array, funcMap);
console.log(typedArray);
// 出力:Int32Array(5) [1, 102, 203, 304, 405, (省略) ]
typedArray = Int32Array.from(array, funcMap2, 10000);
console.log(typedArray);
// 出力:Int32Array(5) [10001, 10102, 10203, 10304, 10405, (省略) ]
// 配列形式
const arrayLike = { 0: 1, 1: 3, 2: 5, length: 3 };
typedArray = Int32Array.from(arrayLike);
console.log(typedArray);
// 出力:Int32Array(3) [1, 3, 5, (省略) ]
typedArray = Int32Array.from(arrayLike, funcMap);
console.log(typedArray);
// 出力:Int32Array(3) [1, 103, 205, (省略) ]
typedArray = Int32Array.from(arrayLike, funcMap2, 10000);
console.log(typedArray);
// 出力:Int32Array(3) [10001, 10103, 10205, (省略) ]
// 文字列
typedArray = Int32Array.from('2468');
console.log(typedArray);
// 出力:Int32Array(4) [2, 4, 6, 8, (省略) ]
// 関数のarguments【引数リスト】
typedArray = funcArguments(100, 200, 300);
console.log(typedArray);
// 出力:Int32Array(3) [100, 200, 300, (省略) ]
%TypedArray%.of【配列生成 (要素指定)】
メモ
概要
- 要素を指定して%TypedArray%【型指定配列ビュー】オブジェクト を生成
関連
外部リンク
- ECMA-262 (英語)
%TypedArray%.of ( ...items ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
%TypedArray%.of( ...items )
%TypedArray%【型指定配列ビュー】オブジェクト
items要素値
例
let typedArray = Int32Array.of(1, 2, 3);
console.log(typedArray);
// 出力:Int32Array(3) [1, 2, 3, (省略) ]
typedArray = Int32Array.of(3);
console.log(typedArray);
// 出力:Int32Array [3, (省略) ]
typedArray = new Int32Array(3); // 参考
console.log(typedArray);
// 出力:Int32Array(3) [0, 0, 0, (省略) ]
typedArray = Int32Array.of();
console.log(typedArray);
// 出力:Int32Array [buffer: ArrayBuffer(0), (省略) ]