new %TypedArray%【コンストラクタ】

メモ

  • ArrayBuffer【バイナリデータ配列】のビューを作成
  • 構文 (5) で同一の実体 (ArrayBuffer【バイナリデータ配列】) を指定すると、複数のビューから参照可
    • 既存の%TypedArray%【型指定配列ビュー】の bufferプロパティを指定しても同様

構文

(1) 要素なし
new %TypedArray% ( )

(2) 要素数指定
new %TypedArray% ( length )

(3) ビュー指定 (コピー)
new %TypedArray% ( typedArray )

(4) オブジェクト指定
new %TypedArray% ( object )

(5) 実体指定
new %TypedArray% ( buffer [ , byteOffset [ , length ] ] )

  • (2) 要素数指定
    • length:要素数
  • (3) ビュー指定 (コピー)
    • typedArray:任意の %TypedArray% オブジェクト
  • (4) オブジェクト指定
    • object:配列オブジェクト・反復オブジェクト 等
  • (5) 実体指定

  • TypeError 例外:new 無しで呼び出し
  • RangeError 例外:構文 (5) で指定範囲が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]

関連