【JSリファレンス】new Uint8Array( )
更新日:2024/06/14
Uint8Arrayコンストラクターは、ArrayBufferまたはSharedArrayBuffer8ビットで区切り、符号なしの整数値として配列形式で参照可能なビューオブジェクトを生成します。
具体的には、一部の動作を除いて、新しいArrayBufferを生成して、Uint8Arrayコンストラクターのインスタンス(Uint8Arrayオブジェクト)に関連付けます。
引数の型により、ArrayBufferの生成方法が変化します。
■構文1
new Uint8Array( )
0バイトのArrayBufferを生成します。
■構文1の使用例
const typedArray = new Uint8Array();
console.log( typedArray ); // []
■構文2
new Uint8Array( length )
lengthはオブジェクトでない値です。
数値に変換され要素数として扱われます。
要素数と要素サイズ(Uint8Array.BYTES_PER_ELEMENT)から必要なバイト数を計算してArrayBufferを生成し、0で初期化します。
■構文2の使用例
const typedArray = new Uint8Array(3);
console.log( typedArray ); // [ 0, 0, 0 ]
■構文3
new Uint8Array( TypedArray )
TypedArrayには、TypedArrayオブジェクトを指定します。
ただし、BigInt64Array、BigUint64Arrayは指定できません。指定するとTypeErrorです。
要素を格納するために必要なバイト数を計算してArrayBufferを生成し、型や符号、ビット数変換を行いながらコピーします。
■構文3の使用例
const typedArray = new Uint8Array(
new Float32Array([5.3,10.6,7.1])
);
console.log( typedArray ); // [ 5, 10, 7 ]
■構文4
new Uint8Array( Iterator ) new Uint8Array( arrayLike )
Iteratorには、イテラブルなオブジェクト(配列を含む)を指定します。
arrayLikeには、アレイライクオブジェクトを指定します。
要素を格納するために必要なバイト数を計算してArrayBufferを生成して、値をセットします。
IteratorおよびarrayLikeから取得する値は、BigInt型およびシンボル型以外である必要があります。BigInt型およびシンボル型を指定するとTypeErrorです。
また数値化できない値や、欠番インデックスは 0 がセットされます。
■構文4の使用例
const typedArray = new Uint8Array([100,,300]);
const typedArray2 = new Uint8Array(
{0:100.5,1:"abc",2:300,length:3}
);
console.log( typedArray ); // [ 100, 0, 44 ]
console.log( typedArray2 ); // [ 100, 0, 44 ]
■構文5
new Uint8Array( buffer [ , byteOffset [ , length ] ] )
※この形式で生成したインスタンスは、新しいArrayBufferを生成しません。
bufferはArrayBufferまたはSharedArrayBufferです。
bufferのbyteOffsetバイトから、length × 要素サイズ の範囲が、関連付けられます。
byteOffsetが要素サイズの倍数である必要があります。
倍数でない、または、関連付ける範囲がbufferの範囲外のときはRangeErrorです。
またインスタンスの一部のプロパティが、特定の値を返すように設定されます。
プロパティ名 | 返す値 |
---|---|
byteOffset | 引数byteOffset |
byteLength | 引数length |
length | 引数length |
■構文5の使用例
const elementSize = Uint8Array.BYTES_PER_ELEMENT;
const buffer = new ArrayBuffer(elementSize*5);
const typedArray = new Uint8Array(buffer,0,3);
const typedArray2 = new Uint8Array(buffer, elementSize * 2 ,3);
typedArray[2] = 100.5;
console.log( typedArray ); // [ 0, 0, 100 ]
console.log( typedArray2 ); // [ 100, 0, 0 ]
関連ページ
更新日:2024/06/14
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://jsref.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。