ArrayBuffer
Baseline 廣泛可用 *
ArrayBuffer 物件用於表示通用的原始二進位制資料緩衝區。
它是一個位元組陣列,在其他語言中常被稱為“位元組陣列”。您不能直接操作 ArrayBuffer 的內容;相反,您需要建立 型別化陣列物件 或 DataView 物件,這些物件以特定格式表示緩衝區,然後使用它們來讀取和寫入緩衝區的內容。
ArrayBuffer() 建構函式會建立一個指定位元組長度的新 ArrayBuffer。您還可以從現有資料中獲取 array buffer,例如,從 Base64 字串或 從本地檔案 中獲取。
ArrayBuffer 是一個 可轉移物件。
描述
調整 ArrayBuffer 的大小
透過在呼叫 ArrayBuffer() 建構函式時包含 maxByteLength 選項,可以使 ArrayBuffer 物件可調整大小。您可以透過訪問其 resizable 和 maxByteLength 屬性,分別查詢 ArrayBuffer 是否可調整大小以及其最大大小是多少。您可以使用 resize() 呼叫為可調整大小的 ArrayBuffer 分配新大小。新位元組將被初始化為 0。
這些功能使得調整 ArrayBuffer 的大小更加高效——否則,您需要建立一個新大小的緩衝區副本。這也在這一點上使 JavaScript 與 WebAssembly 保持一致(Wasm 線性記憶體可以使用 WebAssembly.Memory.prototype.grow() 進行調整)。
轉移 ArrayBuffers
ArrayBuffer 物件可以透過 結構化克隆演算法 在不同的執行上下文之間轉移,例如 Web Workers 或 Service Workers。這可以透過在呼叫 Worker.postMessage() 或 ServiceWorker.postMessage() 時將 ArrayBuffer 作為 可轉移物件 來實現。在純 JavaScript 中,您還可以使用其 transfer() 或 transferToFixedLength() 方法將記憶體的所有權從一個 ArrayBuffer 轉移到另一個。
當 ArrayBuffer 被轉移時,其原始副本會變為已分離——這意味著它不再可用。在任何時刻,只有一個 ArrayBuffer 副本實際擁有對底層記憶體的訪問權。已分離緩衝區具有以下行為:
byteLength變為 0(在緩衝區和關聯的型別化陣列檢視中)。- 呼叫如
resize()和slice()等方法會丟擲TypeError。關聯的型別化陣列檢視的方法也會丟擲TypeError。
您可以透過其 detached 屬性檢查 ArrayBuffer 是否已分離。
建構函式
ArrayBuffer()-
建立一個新的
ArrayBuffer物件。
靜態屬性
ArrayBuffer[Symbol.species]-
用於建立派生物件的建構函式。
靜態方法
ArrayBuffer.isView()-
如果
arg是 ArrayBuffer 檢視之一(例如 型別化陣列物件 或DataView),則返回true。否則返回false。
例項屬性
這些屬性定義在 ArrayBuffer.prototype 上,並由所有 ArrayBuffer 例項共享。
ArrayBuffer.prototype.byteLength-
ArrayBuffer的大小(以位元組為單位)。這在陣列構造時建立,並且只有在ArrayBuffer可調整大小時才能使用ArrayBuffer.prototype.resize()方法進行更改。 ArrayBuffer.prototype.constructor-
建立例項物件的建構函式。對於
ArrayBuffer例項,初始值為ArrayBuffer建構函式。 ArrayBuffer.prototype.detached-
只讀。如果
ArrayBuffer已分離(已轉移),則返回true,否則返回false。 ArrayBuffer.prototype.maxByteLength-
ArrayBuffer可以調整到的最大大小(以位元組為單位),只讀。這在陣列構造時建立,並且不能更改。 ArrayBuffer.prototype.resizable-
只讀。如果
ArrayBuffer可以調整大小,則返回true,否則返回false。 ArrayBuffer.prototype[Symbol.toStringTag]-
[Symbol.toStringTag]屬性的初始值為字串"ArrayBuffer"。此屬性用於Object.prototype.toString()。
例項方法
ArrayBuffer.prototype.resize()-
將
ArrayBuffer調整為指定的位元組大小。 ArrayBuffer.prototype.slice()-
返回一個新的
ArrayBuffer,其內容是此ArrayBuffer從begin(包含)到end(不包含)的位元組副本。如果begin或end為負數,它將引用陣列末尾的索引,而不是開頭的索引。 ArrayBuffer.prototype.transfer()-
建立一個具有與此緩衝區相同位元組內容的新
ArrayBuffer,然後分離此緩衝區。 ArrayBuffer.prototype.transferToFixedLength()-
建立一個具有與此緩衝區相同位元組內容的新不可調整大小的
ArrayBuffer,然後分離此緩衝區。
示例
建立 ArrayBuffer
在此示例中,我們建立一個 8 位元組的緩衝區,並使用指向該緩衝區的 Int32Array 檢視
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-arraybuffer-objects |
瀏覽器相容性
載入中…