ArrayBuffer

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

* Some parts of this feature may have varying levels of support.

Đối tượng ArrayBuffer được sử dụng để biểu diễn bộ đệm dữ liệu nhị phân thô chung.

Đây là mảng byte, thường được gọi trong các ngôn ngữ khác là "mảng byte". Bạn không thể thao tác trực tiếp với nội dung của ArrayBuffer; thay vào đó, bạn tạo một trong các đối tượng mảng được gõ kiểu hoặc đối tượng DataView biểu diễn bộ đệm ở định dạng cụ thể, và dùng nó để đọc và ghi nội dung của bộ đệm.

Constructor ArrayBuffer() tạo ArrayBuffer mới có độ dài tính bằng byte được chỉ định. Bạn cũng có thể lấy bộ đệm mảng từ dữ liệu hiện có, chẳng hạn từ chuỗi Base64 hoặc từ tệp cục bộ.

ArrayBufferđối tượng có thể chuyển giao.

Mô tả

Thay đổi kích thước ArrayBuffer

Đối tượng ArrayBuffer có thể được làm cho có thể thay đổi kích thước bằng cách bao gồm tùy chọn maxByteLength khi gọi constructor ArrayBuffer(). Bạn có thể truy vấn xem ArrayBuffer có thể thay đổi kích thước và kích thước tối đa của nó là bao nhiêu bằng cách truy cập các thuộc tính resizablemaxByteLength tương ứng. Bạn có thể gán kích thước mới cho ArrayBuffer có thể thay đổi kích thước bằng lệnh gọi resize(). Các byte mới được khởi tạo bằng 0.

Các tính năng này làm cho việc thay đổi kích thước ArrayBuffer hiệu quả hơn — nếu không, bạn phải tạo bản sao của bộ đệm với kích thước mới. Nó cũng cung cấp cho JavaScript tính tương đương với WebAssembly trong vấn đề này (bộ nhớ tuyến tính Wasm có thể được thay đổi kích thước với WebAssembly.Memory.prototype.grow()).

Chuyển giao ArrayBuffer

Đối tượng ArrayBuffer có thể được chuyển giao giữa các ngữ cảnh thực thi khác nhau, như Web Workers hay Service Workers, sử dụng thuật toán sao chép có cấu trúc. Điều này được thực hiện bằng cách truyền ArrayBuffer như đối tượng có thể chuyển giao trong lệnh gọi đến Worker.postMessage() hay ServiceWorker.postMessage(). Trong JavaScript thuần túy, bạn cũng có thể chuyển quyền sở hữu bộ nhớ từ ArrayBuffer này sang ArrayBuffer khác bằng cách sử dụng phương thức transfer() hay transferToFixedLength() của nó.

Khi một ArrayBuffer được chuyển giao, bản sao gốc của nó trở thành bị tách rời — điều này có nghĩa là nó không còn có thể sử dụng được. Tại bất kỳ thời điểm nào, sẽ chỉ có một bản sao của ArrayBuffer thực sự có quyền truy cập vào bộ nhớ cơ bản. Các bộ đệm bị tách rời có các hành vi sau:

  • byteLength trở thành 0 (trong cả bộ đệm và các khung nhìn mảng được gõ kiểu liên quan).
  • Các phương thức, chẳng hạn như resize()slice(), ném ra TypeError khi được gọi. Các phương thức của các khung nhìn mảng được gõ kiểu liên quan cũng ném TypeError.

Bạn có thể kiểm tra xem ArrayBuffer có bị tách rời hay không bằng thuộc tính detached của nó.

Constructor

ArrayBuffer()

Tạo đối tượng ArrayBuffer mới.

Thuộc tính tĩnh

ArrayBuffer[Symbol.species]

Hàm constructor được sử dụng để tạo các đối tượng dẫn xuất.

Phương thức tĩnh

ArrayBuffer.isView()

Trả về true nếu arg là một trong các khung nhìn ArrayBuffer, chẳng hạn như đối tượng mảng được gõ kiểu hay DataView. Trả về false nếu không phải.

Thuộc tính instance

Các thuộc tính này được định nghĩa trên ArrayBuffer.prototype và được chia sẻ bởi tất cả các instance ArrayBuffer.

ArrayBuffer.prototype.byteLength

Kích thước, tính bằng byte, của ArrayBuffer. Được thiết lập khi mảng được xây dựng và chỉ có thể thay đổi bằng phương thức ArrayBuffer.prototype.resize() nếu ArrayBuffer có thể thay đổi kích thước.

ArrayBuffer.prototype.constructor

Hàm constructor đã tạo đối tượng instance. Đối với các instance ArrayBuffer, giá trị khởi tạo là constructor ArrayBuffer.

ArrayBuffer.prototype.detached

Chỉ đọc. Trả về true nếu ArrayBuffer đã bị tách rời (chuyển giao), hoặc false nếu chưa.

ArrayBuffer.prototype.maxByteLength

Độ dài tối đa chỉ đọc, tính bằng byte, mà ArrayBuffer có thể được thay đổi kích thước đến. Được thiết lập khi mảng được xây dựng và không thể thay đổi.

ArrayBuffer.prototype.resizable

Chỉ đọc. Trả về true nếu ArrayBuffer có thể thay đổi kích thước, hoặc false nếu không thể.

ArrayBuffer.prototype[Symbol.toStringTag]

Giá trị khởi tạo của thuộc tính [Symbol.toStringTag] là chuỗi "ArrayBuffer". Thuộc tính này được dùng trong Object.prototype.toString().

Phương thức instance

ArrayBuffer.prototype.resize()

Thay đổi kích thước ArrayBuffer thành kích thước được chỉ định, tính bằng byte.

ArrayBuffer.prototype.slice()

Trả về ArrayBuffer mới có nội dung là bản sao các byte của ArrayBuffer này từ begin (bao gồm) đến end (không bao gồm). Nếu begin hoặc end âm, nó tham chiếu đến chỉ số tính từ cuối mảng, thay vì từ đầu.

ArrayBuffer.prototype.transfer()

Tạo ArrayBuffer mới có cùng nội dung byte như bộ đệm này, sau đó tách rời bộ đệm này.

ArrayBuffer.prototype.transferToFixedLength()

Tạo ArrayBuffer không thể thay đổi kích thước mới có cùng nội dung byte như bộ đệm này, sau đó tách rời bộ đệm này.

Ví dụ

Tạo ArrayBuffer

Trong ví dụ này, chúng ta tạo bộ đệm 8 byte với khung nhìn Int32Array tham chiếu đến bộ đệm:

js
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);

Đặc tả kỹ thuật

Thông số kỹ thuật
ECMAScript® 2027 Language Specification
# sec-arraybuffer-objects

Tương thích trình duyệt

Xem thêm