こんにちは。id:tyageです。
10/6に第11回を行いました
第11回
この回では、 ArrayBuffer, typed arrays, typed arrays (DataView) を読みました。
(既に使っている人も多いと思うので、短めになります)
ArrayBuffer
メモリ領域を確保したりするのに利用するオブジェクトです。
結構前から実装されているブラウザが多いので、既に各所で利用されていると思います。
ab = new ArrayBuffer(1024) ab.length // => 1024
ArrayBuffer.prototype.slice(start, end)ではArrayBufferを範囲指定して切り取ることができます。
ArrayBuffer.isViewはArrayBufferにアクセスするためのview(以下で出てくるtyped arrayやdata viewです)かどうかがわかります。
typed arrays
ArrayBufferを扱うためのViewで、array likeに扱うことができます。
具体的には以下のようなオブジェクトがあります
- Int8Array
- Uint8Array
- Uint8ClampedArray
- Int16Array
- Uint16Array
- Int32Array
- Uint32Array
- Float32Array
- Float64Array
名前の通りの型でデータを扱うことができます。 (詳細: https://people.mozilla.org/~jorendorff/es6-draft.html#table-46)
Uint8ClampedArrayはUint8Arrayとは範囲を超えた時の扱いが異なり、負の数だと0に、256以上だと255にするようになっています。
var a = new Uint8Array(1);a[0] = 1111;console.log(a); // => 87 var a = new Uint8ClampedArray(1);a[0] = 1111;console.log(a); // => 255
コンストラクタの引数には数値(この場合、数値分の長さのtyped arrayが生成される)や他のtyped arrayやarray bufferを与えることができます。
array likeなオブジェクトなので、Array.prototypeと共通のメソッドやプロパティが多いですが、それ以外にも以下の様なものがあります
- %TypedArray%.prototype.set
- 配列やTypedArrayを渡すとそれで埋めることができます。第二引数でoffsetが指定できます
- %TypedArray%.prototype.subarray
- String.prototype.substringみたいなやつ。第一引数から第二引数(省略可能)までに切り取ることができます
また、Array.ofやArray.fromのように、%TypedArray%.ofや%TypedArray%.fromも使えます
typed arrays (DataView)
typed arrayではInt8Arrayなど型を指定した上でアクセスしていましたが、DataViewオブジェクトでは、メソッド呼び出し時に型を指定してデータにアクセスできます。
typed arrayの時と異なり、alignmentを気にする必要はありません
ab = new ArrayBuffer(10) dv = new DataView(ab) dv.setUint16(1, 45) dv.getUint16(1) // => 45 dv.getUint32(1) // => 2949120
またデフォルトではbig endianとして扱われますが、getメソッドでは第2引数に、setメソッドでは第3引数にtrueを与えるとlittle endianにできます。(ただしgetInt8, setInt8を除く)
次は、第12回(10/13)です