了解什麼是類型化數組以及如何使用它們
JavaScript提供了8種類型化數組類型:
Int8Array
:8位有符號整數數組Int16Array
:16位有符號整數數組Int32Array
:32位有符號整數數組Uint8Array
:8位無符號整數數組Uint16Array
:16位無符號整數數組Uint32Array
:32位無符號整數數組Float32Array
:32位浮點數數組Float64Array
:64位浮點數數組
它們都是ArrayBufferView
實例。
類型化數組本質上是對ArrayBuffer
的一個視圖,其中每個項目的大小和類型相同。
DataView
是對ArrayBuffer
的另一種視圖,但在這種情況下,數組中的項目可以具有不同的大小和類型。
以下是創建一個8位有符號整數數組的示例:
const a = new Int8Array()
您可以預先分配n個字節:
const bytes = 1024
const a = new Int8Array(bytes)
主要用途是允許查看ArrayBuffer
的內容,因為ArrayBuffer
本身是不透明的(我們無法查看其內容)。
下面是如何進行查看:
//我們有這個`buffer` ArrayBuffer
const a = new Int8Array(buffer)
這些類型化數組類似於數組,因此現在我們可以通過常用的數組訪問技術來查看緩衝區的內容,並且我們可以訪問許多方法和屬性,包括map()
、reduce()
等。
類型化數組的主要用例是與WebGL、Web Audio或Canvas API一起使用。一些WebGL函數期望使用類型化數組,因為它們比常規JavaScript數組更高效。
需要記住的一點是,類型化數組無法控制字節順序:它使用平台的字節順序。一般來說,這樣做是沒問題的,因為正如我們所說,主要用例是在本地使用數組,使用多媒體API之一。另外,大多數消費型計算機使用小端序(Intel使用該約定)。但是,如果您將類型化數組的數據轉移到使用大端序的系統上,則數據可能編碼錯誤,因此無效。
如果需要對字節順序進行這種控制,請改用DataView。