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

```

    new Uint8Array((new ArrayBuffer(64)));
    
    new Uint8Array(64); について
    
```
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>

```

    new Uint8Array(64)
    
```

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

```

    new Uint8Array(new ArrayBuffer(64))
    
```

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

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

```

    new Uint8Array(64)
    new Uint8Array(new ArrayBuffer(64))
    
```

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

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