44561


**下記に違いはありますか？**  
・全く同じことを違う書き方しているだけ？  
・それぞれを、使い分ける場面はありますか？

[code]

    new Uint8Array((new ArrayBuffer(64)));
    
    new Uint8Array(64); について
    
[/code]


CC BY-SA 4.0
2018-06-06T01:49:44.990
44545
2018-06-06T08:23:25.023
7886
question
javascript
new Uint8Array((new ArrayBuffer(64))); と new Uint8Array(64); について


TypedArray のコンストラクタは引数の個数、引数の型によってオーバーロードされています  
<https://www.ecma-international.org/ecma-262/8.0/index.html#sec-typedarray-
constructors>

[code]

    new Uint8Array(64)
    
[/code]

は Uint8Array( length ) というコンストラクタが使われます  
length に等しい長さの TypedArray を作成してくれます

[code]

    new Uint8Array(new ArrayBuffer(64))
    
[/code]

は Uint8Array( buffer [ , byteOffset [ , length ] ] ) というコンストラクタが使われます  
buffer の一部を参照する TypedArray を作成することができます

今回の例では byteOffset, length を指定しておらず、Uint8Array の ElementSize は1なので

[code]

    new Uint8Array(64)
    new Uint8Array(new ArrayBuffer(64))
    
[/code]

のどちらでも得られる結果は等しいです

C の union を実現しようとしたり、データ型が切り替わるバイトシーケンスを取り扱う場合(ヘッダ情報のパースなど)、Uint8Array( buffer
[ , byteOffset [ , length ] ] ) コンストラクタを利用すると便利です


CC BY-SA 4.0
2018-06-06T08:23:25.023
44561
2018-06-06T08:23:25.023
9796
44545
answer