new ArrayBuffer【コンストラクタ】
isView【ビュー判定】メソッド
slice【部分コピー】メソッド

new ArrayBuffer【コンストラクタ】

メモ

  • 配列は 0 クリア

構文

new ArrayBuffer ( length )

  • length:サイズ (バイト単位)

TypeError 例外:new なしで呼び出し
RangeError 例外:lengthが 0 未満
RangeError 例外:確保不可

var buff = new ArrayBuffer(8);
var typedArray = new Int32Array(buff)
console.log(typedArray, typedArray.byteLength, typedArray.length);
// 出力:[0, 0] 8 2

ArrayBuffer.isView【ビュー判定】メソッド

メモ

  • ビューか否かを判定

構文

ArrayBuffer.isView ( arg )

  • arg:判定するビュー

  • true:ビュー
  • false:その他

var buff = new ArrayBuffer(8);
console.log(ArrayBuffer.isView(buff));
// 出力:false
var typedArray = new Int32Array(buff)
console.log(ArrayBuffer.isView(typedArray));
// 出力:true

ArrayBuffer.prototype.slice【部分コピー】メソッド

メモ

  • コピーして新規に ArrayBuffer を作成
  • 開始要素位置を0、終了要素位置を省略すれば全コピー

構文

slice ( start [, end] )

  • start:開始要素位置
    start説明
    0 ≦先頭からの要素位置 (要素数 <:要素数)
    < 0末尾からの要素位置 (-1:末尾)
  • end:終了要素位置 (この位置の要素は含まない)
    end説明
    省略末尾まで (要素数:末尾+1)
    0 ≦先頭からの要素位置 (要素数 <:要素数)
    < 0末尾からの要素位置 (-1:末尾)

  • コピーされた新規の ArrayBuffer
  • (endstart の場合、サイズは 0)

var buff1 = new ArrayBuffer(20);
var typedArray1 = new Int32Array(buff1)
for (var i = 0; i < typedArray1.length; i++) {
  typedArray1[i] = i;
}
console.log(typedArray1, typedArray1.length, buff1.byteLength);
// 出力:[0, 1, 2, 3, 4] 5 20

var buff2 = buff1.slice(4, 16);
var typedArray2 = new Int32Array(buff2)
console.log(typedArray2, typedArray2.length, buff2.byteLength);
// 出力:[1, 2, 3] 3 12

for (var i = 0; i < typedArray2.length; i++) {
  typedArray2[i] += 10;
}
console.log(typedArray1);
// 出力:[0, 1, 2, 3, 4]
console.log(typedArray2);
// 出力:[11, 12, 13]

関連