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 là đố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 resizable và maxByteLength 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:
byteLengthtrở 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()vàslice(), ném raTypeErrorkhi đượ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émTypeError.
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
ArrayBuffermớ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ề
truenếuarglà một trong các khung nhìn ArrayBuffer, chẳng hạn như đối tượng mảng được gõ kiểu hayDataView. Trả vềfalsenế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ứcArrayBuffer.prototype.resize()nếuArrayBuffercó 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à constructorArrayBuffer. ArrayBuffer.prototype.detached-
Chỉ đọc. Trả về
truenếuArrayBufferđã bị tách rời (chuyển giao), hoặcfalsenếu chưa. ArrayBuffer.prototype.maxByteLength-
Độ dài tối đa chỉ đọc, tính bằng byte, mà
ArrayBuffercó 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ề
truenếuArrayBuffercó thể thay đổi kích thước, hoặcfalsenế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 trongObject.prototype.toString().
Phương thức instance
ArrayBuffer.prototype.resize()-
Thay đổi kích thước
ArrayBufferthành kích thước được chỉ định, tính bằng byte. ArrayBuffer.prototype.slice()-
Trả về
ArrayBuffermới có nội dung là bản sao các byte củaArrayBuffernày từbegin(bao gồm) đếnend(không bao gồm). Nếubeginhoặcendâm, nó tham chiếu đến chỉ số tính từ cuối mảng, thay vì từ đầu. ArrayBuffer.prototype.transfer()-
Tạo
ArrayBuffermớ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
ArrayBufferkhô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:
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> |