ArrayBuffer
对象用来表示通用的、固定长度的原始二进制数据缓冲区。ArrayBuffer
不能直接操作,而是要通过类型数组对象或 DataView
对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
new ArrayBuffer(length)
length
ArrayBuffer
的大小,单位为字节。一个指定大小的 ArrayBuffer
对象,其内容被初始化为 0。
如果 length 大于 Number.MAX_SAFE_INTEGER
(>= 2 ** 53)或为负数,则抛出一个 RangeError
异常。
ArrayBuffer
构造函数用来创建一个指定字节长度的 ArrayBuffer
对象。
ArrayBuffer.length
get ArrayBuffer[@@species]
ArrayBuffer.prototype
ArrayBuffer.isView(arg)
true
,例如 类型数组对象 或 DataView
对象;否则返回 false
。ArrayBuffer.transfer(oldBuffer [, newByteLength])
返回一个新的 ArrayBuffer 对象,其内容取自 oldBuffer
中的数据,并且根据 newByteLength
的大小对数据进行截取或补 0。
ArrayBuffer.slice()
ArrayBuffer.prototype.slice()
功能相同。所有 ArrayBuffer
实例都会从 ArrayBuffer.prototype
继承属性和方法。
ArrayBuffer.prototype.byteLength
只读 ArrayBuffer.prototype.slice()
ArrayBuffer
,它的内容是这个 ArrayBuffer
的字节副本,从begin(包括),到end(不包括)。如果begin或end是负数,则指的是从数组末尾开始的索引,而不是从头开始。下面的例子创建了一个 8 字节的缓冲区,并使用一个 Int32Array
来引用它:
var buffer = new ArrayBuffer(8);
var view = new Int32Array(buffer);
Specification | Status | Comment |
---|---|---|
Typed Array Specification | Obsolete | 已被 ECMAScript 6 中的 ArrayBuffer 取代 |
ECMAScript 2015 (6th Edition, ECMA-262) ArrayBuffer |
Standard | 在 ECMA 标准中的初始定义。规定了必须通过 new 来调用构造函数 |
ECMAScript Latest Draft (ECMA-262) ArrayBuffer |
Draft |
Desktop | Mobile | Server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ArrayBuffer | Chrome Full support 7 | Edge Full support 12 | Firefox Full support 4 | IE Full support 10 | Opera Full support 11.6 | Safari Full support 5.1 | WebView Android Full support 4 | Chrome Android Full support Yes | Edge Mobile Full support Yes | Firefox Android Full support 4 | Opera Android Full support 11.6 | Safari iOS Full support 4.2 | Samsung Internet Android Full support Yes | nodejs Full support Yes |
ArrayBuffer() without new throws | Chrome Full support Yes | Edge Full support 14 | Firefox Full support 44 | IE No support No | Opera Full support Yes | Safari ? | WebView Android ? | Chrome Android ? | Edge Mobile ? | Firefox Android Full support 44 | Opera Android ? | Safari iOS ? | Samsung Internet Android ? | nodejs Full support 0.12 |
byteLength | Chrome Full support 7 | Edge Full support 12 | Firefox Full support 4 | IE Full support 10 | Opera Full support 11.6 | Safari Full support 5.1 | WebView Android Full support 4 | Chrome Android Full support Yes | Edge Mobile Full support Yes | Firefox Android Full support 4 | Opera Android Full support 11.6 | Safari iOS Full support 4.2 | Samsung Internet Android Full support Yes | nodejs Full support Yes |
isView | Chrome Full support Yes | Edge Full support 12 | Firefox Full support 29 | IE Full support 11 | Opera Full support Yes | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Edge Mobile Full support Yes | Firefox Android Full support 29 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support Yes | nodejs Full support Yes |
prototype | Chrome Full support 7 | Edge Full support 12 | Firefox Full support 4 | IE Full support 10 | Opera Full support 11.6 | Safari Full support 5.1 | WebView Android Full support 4 | Chrome Android Full support Yes | Edge Mobile Full support Yes | Firefox Android Full support 4 | Opera Android Full support 11.6 | Safari iOS Full support 4.2 | Samsung Internet Android Full support Yes | nodejs Full support Yes |
slice | Chrome Full support Yes | Edge Full support 12 | Firefox
Full support
12
| IE Full support 11 | Opera Full support Yes | Safari Full support 6 | WebView Android Full support Yes | Chrome Android Full support Yes | Edge Mobile Full support Yes | Firefox Android
Full support
14
| Opera Android Full support Yes | Safari iOS Full support 6 | Samsung Internet Android Full support Yes | nodejs Full support Yes |
transfer | Chrome No support No | Edge No support No | Firefox No support No | IE No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Edge Mobile No support No | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No | nodejs No support No |
@@species | Chrome ? | Edge Full support 13 | Firefox Full support 48 | IE ? | Opera ? | Safari ? | WebView Android ? | Chrome Android ? | Edge Mobile ? | Firefox Android Full support 48 | Opera Android ? | Safari iOS ? | Samsung Internet Android ? | nodejs
Full support
6.5.0
|
从 ECMAScript 2015 开始,ArrayBuffer
对象需要用 new
运算符创建。如果调用构造函数时没有使用 new
,将会抛出 TypeError
异常。
var dv = ArrayBuffer(10);
// TypeError: calling a builtin ArrayBuffer constructor
// without new is forbidden
var dv = new ArrayBuffer(10);