ArrayBuffer、型付き配列、DataView«ElementType»Array.from()new ArrayBuffer()ArrayBufferの静的メソッドArrayBuffer.prototypeのプロパティTypedArray<T>の静的メソッドTypedArray<T>.prototypeのプロパティnew «ElementType»Array()«ElementType»Arrayの静的プロパティ«ElementType»Array.prototypeのプロパティnew DataView()DataView.prototypeのプロパティWeb上の多くのデータはテキストです。JSONファイル、HTMLファイル、CSSファイル、JavaScriptコードなどです。JavaScriptは、組み込みの文字列を介してそのようなデータをうまく処理します。
しかし、2011年以前は、バイナリデータをうまく処理できませんでした。Typed Array Specification 1.0は2011年2月8日に導入され、バイナリデータを扱うためのツールを提供しています。ECMAScript 6では、型付き配列がコア言語に追加され、以前は通常の配列(.map()、.filter()など)でのみ使用可能だったメソッドが追加されました。
型付き配列の主なユースケースは次のとおりです。
ArrayBuffer、型付き配列、DataView型付き配列APIは、バイナリデータをArrayBufferのインスタンスに格納します
const buf = new ArrayBuffer(4); // length in bytes
// buf is initialized with zerosArrayBuffer自体はブラックボックスです。そのデータにアクセスするには、別のオブジェクト、つまり*ビューオブジェクト*でラップする必要があります。2種類のビューオブジェクトを使用できます
Uint8Array:要素は符号なし8ビット整数です。*符号なし*とは、範囲がゼロから始まることを意味します。Int16Array:要素は符号付き16ビット整数です。*符号付き*とは、符号があり、負、ゼロ、または正になる可能性があることを意味します。Float32Array:要素は32ビット浮動小数点数です。Uint8、Int16、Float32など)としてデータを解釈できます。図20は、APIのクラス図を示しています。
型付き配列は、いくつかの注目すべき違いを除いて、通常の配列とほぼ同じように使用されます
次のコードは、同じ型付き配列を作成する3つの異なる方法を示しています
// Argument: Typed Array or Array-like object
const ta1 = new Uint8Array([0, 1, 2]);
const ta2 = Uint8Array.of(0, 1, 2);
const ta3 = new Uint8Array(3); // length of Typed Array
ta3[0] = 0;
ta3[1] = 1;
ta3[2] = 2;
assert.deepEqual(ta1, ta2);
assert.deepEqual(ta1, ta3);const typedArray = new Int16Array(2); // 2 elements
assert.equal(typedArray.length, 2);
assert.deepEqual(
typedArray.buffer, new ArrayBuffer(4)); // 4 bytesconst typedArray = new Int16Array(2);
assert.equal(typedArray[1], 0); // initialized with 0
typedArray[1] = 72;
assert.equal(typedArray[1], 72);DataViewの使い方は次のとおりです
const dataView = new DataView(new ArrayBuffer(4));
assert.equal(dataView.getInt16(0), 0);
assert.equal(dataView.getUint8(0), 0);
dataView.setUint8(0, 5);| 要素 | 型付き配列 | バイト数 | 説明 | |
|---|---|---|---|---|
Int8 |
Int8Array |
1 | 1 | 8ビット符号付き整数 |
ES6 |
Uint8 |
1 | Uint8Array | 8ビット符号付き整数 |
1 |
8ビット符号なし整数 |
1 | Uint8Array | 8ビット符号付き整数 |
| Uint8C | 8ビット符号付き整数 | |||
Uint8ClampedArray |
1 |
2 | (クランプ変換) | 8ビット符号付き整数 |
Int16 |
Int16Array |
2 | 2 | 8ビット符号付き整数 |
16ビット符号付き整数 |
Uint16 |
4 | Uint16Array | 8ビット符号付き整数 |
2 |
16ビット符号なし整数 |
4 | Int32 | 8ビット符号付き整数 |
Int32Array |
4 |
8 | 32ビット符号付き整数 | Uint32 |
Uint32Array |
4 |
8 | 32ビット符号なし整数 | Uint32 |
BigInt64 |
BigInt64Array |
4 | 8 | 8ビット符号付き整数 |
64ビット符号付き整数 |
ES2020 |
8 | BigUint64 | 8ビット符号付き整数 |
BigUint64Array
8
64ビット符号なし整数
Float32
Float32Array
4
32ビット浮動小数点数
Float64Array
表20は、使用可能な要素の型をリストしています。これらの型(例:Int32)は、2つの場所に表示されます
function setAndGet(typedArray, value) {
typedArray[0] = value;
return typedArray[0];
}型付き配列では、要素の型を指定します。たとえば、Int32Arrayのすべての要素は、型Int32を持ちます。要素の型は、型付き配列で異なる唯一の側面です。
const uint8 = new Uint8Array(1);
// Highest value of range
assert.equal(setAndGet(uint8, 255), 255);
// Overflow
assert.equal(setAndGet(uint8, 256), 0);
// Lowest value of range
assert.equal(setAndGet(uint8, 0), 0);
// Underflow
assert.equal(setAndGet(uint8, -1), 255);DataViewでは、.getInt32()や.setInt32()などのメソッドを使用するときに、ArrayBufferにアクセスするためのレンズとなります。
const int8 = new Int8Array(1);
// Highest value of range
assert.equal(setAndGet(int8, 127), 127);
// Overflow
assert.equal(setAndGet(int8, 128), -128);
// Lowest value of range
assert.equal(setAndGet(int8, -128), -128);
// Underflow
assert.equal(setAndGet(int8, -129), 127);要素型Uint8Cは特殊です。DataViewではサポートされておらず、Uint8ClampedArrayを有効にするためにのみ存在します。この型付き配列は、canvas要素(CanvasPixelArrayを置き換える場所)で使用され、それ以外の場合は避ける必要があります。Uint8CとUint8の唯一の違いは、オーバーフローとアンダーフローの処理方法です(次のサブセクションで説明)。
BigInt64とBigUint64は、bigintを介して処理されます。たとえば、セッターはbigintを受け入れ、ゲッターはbigintを返します。const uint8c = new Uint8ClampedArray(1);
// Highest value of range
assert.equal(setAndGet(uint8c, 255), 255);
// Overflow
assert.equal(setAndGet(uint8c, 256), 255);
// Lowest value of range
assert.equal(setAndGet(uint8c, 0), 0);
// Underflow
assert.equal(setAndGet(uint8c, -1), 0);32.2.1 オーバーフローとアンダーフローの処理
最小値から1を引くと、最大値に変換されます。
次の関数は、変換の仕組みを説明するのに役立ちます
アンダーフローするすべての値は、最小値に変換されます。
32.2.2 エンディアン
Uint16など)が複数のバイトのシーケンスとして格納される場合は常に、*エンディアン*が重要になりますビッグエンディアン:最上位バイトが最初に来ます。たとえば、Uint16値0x4321は、2つのバイト(最初に0x43、次に0x21)として格納されます。
.from<S>(
source: Iterable<S>|ArrayLike<S>,
mapfn?: S => ElementType, thisArg?: any)
: «ElementType»Arrayリトルエンディアン:最下位バイトが最初に来ます。たとえば、Uint16値0x4321は、2つのバイト(最初に0x21、次に0x43)として格納されます。
エンディアンは、CPUアーキテクチャごとに固定される傾向があり、ネイティブAPI全体で一貫しています。型付き配列はこれらのAPIと通信するために使用されるため、エンディアンはプラットフォームのエンディアンに従い、変更できません。
assert.deepEqual(
Uint16Array.from([0, 1, 2]),
Uint16Array.of(0, 1, 2));一方、プロトコルとバイナリファイルのエンディアンは異なりますが、プラットフォーム全体でフォーマットごとに固定されています。したがって、どちらのエンディアンでもデータにアクセスできる必要があります。DataViewはこのユースケースに対応し、値を取得または設定するときにエンディアンを指定できます。
assert.deepEqual(
Uint16Array.from(Uint8Array.of(0, 1, 2)),
Uint16Array.of(0, 1, 2));エンディアンに関するWikipediaの引用
assert.deepEqual(
Uint16Array.from({0:0, 1:1, 2:2, length: 3}),
Uint16Array.of(0, 1, 2));オプションの mapfn を使用すると、source の要素が結果の要素になる前に変換できます。 なぜマッピングと変換の 2 つのステップを一度に行うのでしょうか? .map() を介して個別にマッピングするのと比較して、2 つの利点があります。
2 番目の利点の説明については、以下をお読みください。
静的メソッド .from() は、オプションで Typed Array タイプ間のマッピングと変換の両方を行うことができます。 このメソッドを使用すると、エラーが発生する可能性が低くなります。
その理由を理解するために、まず Typed Array をより高い精度の Typed Array に変換してみましょう。 .from() を使用してマッピングする場合、結果は自動的に正しくなります。 そうでない場合は、最初に変換してからマッピングする必要があります。
const typedArray = Int8Array.of(127, 126, 125);
assert.deepEqual(
Int16Array.from(typedArray, x => x * 2),
Int16Array.of(254, 252, 250));
assert.deepEqual(
Int16Array.from(typedArray).map(x => x * 2),
Int16Array.of(254, 252, 250)); // OK
assert.deepEqual(
Int16Array.from(typedArray.map(x => x * 2)),
Int16Array.of(-2, -4, -6)); // wrongTyped Array から精度が低い Typed Array に変換する場合、.from() を介したマッピングは正しい結果を生成します。 そうでない場合は、最初にマッピングしてから変換する必要があります。
assert.deepEqual(
Int8Array.from(Int16Array.of(254, 252, 250), x => x / 2),
Int8Array.of(127, 126, 125));
assert.deepEqual(
Int8Array.from(Int16Array.of(254, 252, 250).map(x => x / 2)),
Int8Array.of(127, 126, 125)); // OK
assert.deepEqual(
Int8Array.from(Int16Array.of(254, 252, 250)).map(x => x / 2),
Int8Array.of(-1, -2, -3)); // wrong問題は、.map() を介してマッピングする場合、入力タイプと出力タイプが同じになることです。 対照的に、.from() は、任意の入力タイプから、レシーバーを介して指定する出力タイプに変換します。
Typed Array は反復可能です。 つまり、for-of ループやその他の反復ベースのメカニズムを使用できます。
const ui8 = Uint8Array.of(0, 1, 2);
for (const byte of ui8) {
console.log(byte);
}
// Output:
// 0
// 1
// 2ArrayBuffer と DataView は反復可能ではありません。
Typed Array は通常の Array と非常によく似ています。.length があり、要素にはブラケット演算子 [] を介してアクセスでき、標準の Array メソッドのほとんどを備えています。 Typed Array は、以下の点で通常の Array とは異なります。
Typed Array にはバッファがあります。 Typed Array ta の要素は ta に格納されず、ta.buffer を介してアクセスできる関連付けられた ArrayBuffer に格納されます。
const ta = new Uint16Array(2); // 2 elements
assert.deepEqual(
ta.buffer, new ArrayBuffer(4)); // 4 bytesTyped Array はゼロで初期化されます。
new Array(4) は、要素のない通常の Array を作成します。 4 つの穴(要素が関連付けられていない .length 未満のインデックス)のみがあります。new Uint8Array(4) は、4 つの要素がすべて 0 である Typed Array を作成します。assert.deepEqual(new Uint8Array(4), Uint8Array.of(0, 0, 0, 0));Typed Array のすべての要素は同じ型です。
要素を設定すると、値がその型に変換されます。
const ta = new Uint8Array(1);
ta[0] = 257;
assert.equal(ta[0], 1); // 257 % 256 (overflow)
ta[0] = '2';
assert.equal(ta[0], 2);要素を取得すると、数値または bigint が返されます。
const ta = new Uint8Array(1);
assert.equal(ta[0], 0);
assert.equal(typeof ta[0], 'number');Typed Array の .length は、その ArrayBuffer から派生し、変更されることはありません(別の ArrayBuffer に切り替えない限り)。
通常の Array には穴がありますが、Typed Array にはありません。
通常の Array を Typed Array に変換するには、Typed Array コンストラクター(Array ライクなオブジェクトと Typed Array を受け入れる)または «ElementType»Array.from()(反復可能オブジェクトと Array ライクなオブジェクトを受け入れる)に渡します。 例:
const ta1 = new Uint8Array([0, 1, 2]);
const ta2 = Uint8Array.from([0, 1, 2]);
assert.deepEqual(ta1, ta2);Typed Array を通常の Array に変換するには、Array.from() またはスプレッド構文を使用できます(Typed Array は反復可能であるため)。
assert.deepEqual(
[...Uint8Array.of(0, 1, 2)], [0, 1, 2]
);
assert.deepEqual(
Array.from(Uint8Array.of(0, 1, 2)), [0, 1, 2]
);Typed Array には、通常の Array のような .concat() メソッドがありません。 回避策は、オーバーロードされたメソッド .set() を使用することです。
.set(typedArray: TypedArray, offset=0): void
.set(arrayLike: ArrayLike<number>, offset=0): void既存の typedArray または arrayLike を、インデックス offset のレシーバーにコピーします。 TypedArray は、すべての具体的な Typed Array クラスの架空の抽象スーパークラスです。
次の関数は、そのメソッドを使用して、ゼロ個以上の Typed Array(または Array ライクなオブジェクト)を resultConstructor のインスタンスにコピーします。
function concatenate(resultConstructor, ...arrays) {
let totalLength = 0;
for (const arr of arrays) {
totalLength += arr.length;
}
const result = new resultConstructor(totalLength);
let offset = 0;
for (const arr of arrays) {
result.set(arr, offset);
offset += arr.length;
}
return result;
}
assert.deepEqual(
concatenate(Uint8Array, Uint8Array.of(1, 2), [3, 4]),
Uint8Array.of(1, 2, 3, 4));ArrayBuffer、Typed Array、および DataView のクイックリファレンスの準備として、インデックスとオフセットの違いを学ぶ必要があります。
ブラケット演算子 [ ] のインデックス: 非負のインデックス(0 から始まる)のみを使用できます。
通常の Array では、負のインデックスに書き込むとプロパティが作成されます。
const arr = [6, 7];
arr[-1] = 5;
assert.deepEqual(
Object.keys(arr), ['0', '1', '-1']);Typed Array では、負のインデックスへの書き込みは無視されます。
const tarr = Uint8Array.of(6, 7);
tarr[-1] = 5;
assert.deepEqual(
Object.keys(tarr), ['0', '1']);ArrayBuffer、Typed Array、および DataView のメソッドのインデックス: すべてのインデックスは負にすることができます。 負の場合、エンティティの長さに加算されて実際のインデックスが生成されます。 したがって、-1 は最後の要素、-2 は最後から 2 番目の要素などを参照します。 通常の Array のメソッドも同じように機能します。
const ui8 = Uint8Array.of(0, 1, 2);
assert.deepEqual(ui8.slice(-1), Uint8Array.of(2));Typed Array および DataView のメソッドに渡されるオフセット: 非負である必要があります。例:
const dataView = new DataView(new ArrayBuffer(4));
assert.throws(
() => dataView.getUint8(-1),
{
name: 'RangeError',
message: 'Offset is outside the bounds of the DataView',
});パラメータがインデックスかオフセットかは、ドキュメントを確認することによってのみ判別できます。簡単なルールはありません。
ArrayBuffer はバイナリデータを格納し、Typed Array および DataView を介してアクセスすることを目的としています。
new ArrayBuffer()コンストラクターの型シグネチャは次のとおりです。
new ArrayBuffer(length: number)new を介してこのコンストラクターを呼び出すと、容量が length バイトのインスタンスが作成されます。 これらのバイトはそれぞれ初期値として 0 です。
ArrayBuffer の長さを変更することはできません。 長さの異なる新しいものを作成することしかできません。
ArrayBuffer の静的メソッドArrayBuffer.isView(arg: any)
arg がオブジェクトであり、ArrayBuffer の*ビュー*(つまり、Typed Array または DataView である)の場合、true を返します。
ArrayBuffer.prototype のプロパティget .byteLength(): number
この ArrayBuffer の容量をバイト単位で返します。
.slice(startIndex: number, endIndex=this.byteLength)
インデックスが startIndex 以上 endIndex 未満であるこの ArrayBuffer のバイトを含む新しい ArrayBuffer を作成します。 start と endIndex は負にすることができます(§32.4「クイックリファレンス: インデックスとオフセット」を参照)。
さまざまな Typed Array オブジェクトのプロパティは、2 つのステップで導入されます。
TypedArray: まず、すべての Typed Array クラスの抽象スーパークラス(この章の冒頭のクラス図で示されています)を見ていきます。 このスーパークラスを TypedArray と呼んでいますが、JavaScript から直接アクセスすることはできません。 TypedArray.prototype は、Typed Array のすべてのメソッドを格納します。«ElementType»Array: 具体的な Typed Array クラスは、Uint8Array、Int16Array、Float32Array などと呼ばれます。 これらは、new、.of、および .from() を介して使用するクラスです。TypedArray<T> の静的メソッド両方の静的 TypedArray メソッドは、そのサブクラス(Uint8Array など)によって継承されます。 TypedArray は抽象的です。 したがって、これらのメソッドは常に、具体的で直接インスタンスを持つことができるサブクラスを介して使用します。
.from<S>(source: Iterable<S>|ArrayLike<S>, mapfn?: S => T, thisArg?: any) : instanceof this
反復可能オブジェクト(Array および Typed Array を含む)またはArray ライクなオブジェクトを this のインスタンスに変換します(instanceof this は、その事実を表現するために私が考案したものです)。
assert.deepEqual(
Uint16Array.from([0, 1, 2]),
Uint16Array.of(0, 1, 2));オプションの mapfn を使用すると、source の要素が結果の要素になる前に変換できます。
assert.deepEqual(
Int16Array.from(Int8Array.of(127, 126, 125), x => x * 2),
Int16Array.of(254, 252, 250));.of(...items: bigint[]): instanceof this (BigInt64Array, BigUint64Array)
.of(...items: number[]): instanceof this (その他すべての Typed Array)
要素が items(要素型に強制変換される)である this の新しいインスタンスを作成します。
assert.deepEqual(
Int16Array.of(-1234, 5, 67),
new Int16Array([-1234, 5, 67]) );TypedArray<T>.prototype のプロパティTyped Array メソッドで受け入れられるインデックスは負にすることができます(従来の Array メソッドと同じように機能します)。 オフセットは非負である必要があります。 詳細については、§32.4「クイックリファレンス: インデックスとオフセット」を参照してください。
次のプロパティは Typed Array 固有です。通常の Array にはありません。
get .buffer(): ArrayBuffer
この Typed Array を支えるバッファを返します。
get .length(): number
この Typed Array のバッファの要素数を返します。.
get .byteLength(): number
この Typed Array のバッファのサイズをバイト単位で返します。
get .byteOffset(): number
この Typed Array が ArrayBuffer 内で「開始」するオフセットを返します。
.set(typedArray: TypedArray, offset=0): void
.set(arrayLike: ArrayLike<bigint>, offset=0): void (BigInt64Array, BigUint64Array)
.set(arrayLike: ArrayLike<number>, offset=0): void (その他すべての Typed Array)
最初のパラメータのすべての要素をこの Typed Array にコピーします。 パラメータのインデックス 0 の要素は、この Typed Array のインデックス offset に書き込まれます(など)。 Array ライクなオブジェクトの詳細については、§31.5「Array ライクなオブジェクト」を参照してください。
.subarray(startIndex=0, endIndex=this.length): TypedArray<T>
この Typed Array と同じバッファを持つ新しい Typed Array を返しますが、範囲は(通常)小さくなります。 startIndex が非負の場合、結果の Typed Array の最初の要素は this[startIndex]、2 番目は this[startIndex+1](など)です。 startIndex が負の場合、適切に変換されます。
次のメソッドは、基本的に通常の Array のメソッドと同じです。
.at(index: number): T | undefined [R, ES2022].copyWithin(target: number, start: number, end=this.length): this [W, ES6].entries(): Iterable<[number, T]> [R, ES6].every(callback: (value: T, index: number, array: TypedArray<T>) => boolean, thisArg?: any): boolean [R, ES6].fill(value: T, start=0, end=this.length): this [W, ES6].filter(callback: (value: T, index: number, array: TypedArray<T>) => any, thisArg?: any): T[] [R, ES6].find(predicate: (value: T, index: number, obj: T[]) => boolean, thisArg?: any): T | undefined [R, ES6].findIndex(predicate: (value: T, index: number, obj: T[]) => boolean, thisArg?: any): number [R, ES6].forEach(callback: (value: T, index: number, array: TypedArray<T>) => void, thisArg?: any): void [R, ES6].includes(searchElement: T, fromIndex=0): boolean [R, ES2016].indexOf(searchElement: T, fromIndex=0): number [R, ES6].join(separator = ','): string [R, ES6].keys(): Iterable<number> [R, ES6].lastIndexOf(searchElement: T, fromIndex=this.length-1): number [R, ES6].map<U>(mapFunc: (value: T, index: number, array: TypedArray<T>) => U, thisArg?: any): U[] [R, ES6].reduce<U>(callback: (accumulator: U, element: T, index: number, array: T[]) => U, init?: U): U [R, ES6].reduceRight<U>(callback: (accumulator: U, element: T, index: number, array: T[]) => U, init?: U): U [R, ES6].reverse(): this [W, ES6].slice(start=0, end=this.length): T[] [R, ES6].some(callback: (value: T, index: number, array: TypedArray<T>) => boolean, thisArg?: any): boolean [R, ES6].sort(compareFunc?: (a: T, b: T) => number): this [W, ES6].toString(): string [R, ES6].values(): Iterable<T> [R, ES6]これらのメソッドの動作の詳細については、§31.13.3 “Array.prototypeのメソッド”を参照してください。
new «ElementType»Array()各 Typed Array コンストラクタは、«ElementType»Array のパターンに従う名前を持ちます。ここで、«ElementType» は冒頭の表にある要素型のいずれかです。つまり、Typed Array には 11 個のコンストラクタがあります。
Float32Array、Float64ArrayInt8Array、Int16Array、Int32Array、BigInt64ArrayUint8Array、Uint8ClampedArray、Uint16Array、Uint32Array、BigUint64Array各コンストラクタには、4 つの *オーバーロードされた* バージョンがあります。つまり、受け取る引数の数と型によって動作が異なります。
new «ElementType»Array(buffer: ArrayBuffer, byteOffset=0, length=0)
バッファが buffer である新しい «ElementType»Array を作成します。指定された byteOffset からバッファへのアクセスを開始し、指定された length を持ちます。length はバイト数ではなく、Typed Array の要素数(それぞれ 1〜8 バイト)をカウントすることに注意してください。
new «ElementType»Array(length=0)
指定された length と適切なバッファを持つ新しい «ElementType»Array を作成します。バッファのサイズ(バイト単位)は、
length * «ElementType»Array.BYTES_PER_ELEMENTnew «ElementType»Array(source: TypedArray)
要素の値が source の要素と同じであるが、ElementType に型変換された新しい «ElementType»Array のインスタンスを作成します。
new «ElementType»Array(source: ArrayLike<bigint>) (BigInt64Array、BigUint64Array)
new «ElementType»Array(source: ArrayLike<number>) (その他のすべての Typed Array)
要素の値が source の要素と同じであるが、ElementType に型変換された新しい «ElementType»Array のインスタンスを作成します。配列風オブジェクトの詳細については、§31.5 “配列風オブジェクト”を参照してください。
«ElementType»Array の静的プロパティ«ElementType»Array.BYTES_PER_ELEMENT: number
1 つの要素を格納するために必要なバイト数をカウントします。
> Uint8Array.BYTES_PER_ELEMENT
1
> Int16Array.BYTES_PER_ELEMENT
2
> Float64Array.BYTES_PER_ELEMENT
8«ElementType»Array.prototype のプロパティ.BYTES_PER_ELEMENT: number
«ElementType»Array.BYTES_PER_ELEMENT と同じです。
new DataView()new DataView(buffer: ArrayBuffer, byteOffset=0, byteLength=buffer.byteLength-byteOffset)
buffer に格納される新しい DataView を作成します。デフォルトでは、新しい DataView は buffer 全体にアクセスできます。最後の 2 つのパラメータを使用すると、それを変更できます。DataView.prototype のプロパティこのセクションの残りの部分では、«ElementType» は次のいずれかを指します。
Int8、Int16、Int32、BigInt64Uint8、Uint16、Uint32、BigUint64Float32、Float64これらは DataView.prototype のプロパティです。
get .buffer(): ArrayBuffer
この DataView の ArrayBuffer を返します。
get .byteLength(): number
この DataView がアクセスできるバイト数を返します。
get .byteOffset(): number
この DataView がバッファ内のバイトへのアクセスを開始するオフセットを返します。
.get«ElementType»(byteOffset: number, littleEndian=false): bigint (BigInt64、BigUint64)
.get«ElementType»(byteOffset: number, littleEndian=false): number (その他のすべての要素型)
この DataView のバッファから値を読み取ります。
.set«ElementType»(byteOffset: number, value: bigint, littleEndian=false): void (BigInt64、BigUint64)
.set«ElementType»(byteOffset: number, value: number, littleEndian=false): void (その他のすべての要素型)
value をこの DataView のバッファに書き込みます。