ArrayBuffer对象被用来表示一个通用的,固定长度的二进制数据缓冲区。你不能直接操纵ArrayBuffer的内容;
相反,你应该创建一个表示特定格式的buffer的类型化数组对象(typed array objects)或数据视图对象DataView
来对buffer的内容进行读取和写入操作。
语法
new ArrayBuffer(length)
参数
length
- 要创建的数组缓冲区的大小,以字节为单位。
返回值
一个新的拥有指定大小的ArrayBuffer对象。它的内容都被初始化为0。
描述
ArrayBuffer
构造函数创建一个指定了字节长度的新ArrayBuffer
对象。
从现有数据中获取数组缓冲区
属性
ArrayBuffer.length
- ArrayBuffer构造函数的length属性,它的值是1
get ArrayBuffer[@@species]
- 用于创建派生对象的构造函数
ArrayBuffer.prototype
- 允许给所有ArrayBuffer对象添加属性
方法
ArrayBuffer.isView(arg)
- 如果参数是ArrayBuffer的视图实例就返回true,例如 typed array objects 或
DataView
。否则返回false。 ArrayBuffer.transfer(oldBuffer [, newByteLength])
-
返回一个新的ArrayBuffer,其内容取自oldBuffer的数据,并且根据
newByteLength
的大小来对数据进行截取或者以0扩展。
ArrayBuffer
实例
所有 ArrayBuffer
实例 继承自 ArrayBuffer.prototype
。
属性
- ArrayBuffer.prototype.constructor
- 指定函数,它创建一个对象的原型。其初始值是标准ArrayBuffer内置构造函数。
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 | Superseded by ECMAScript 6. |
ECMAScript 2015 (6th Edition, ECMA-262) ArrayBuffer |
Standard | Initial definition in an ECMA standard. Specified that new is required. |
ECMAScript Latest Draft (ECMA-262) ArrayBuffer |
Living Standard |
浏览器兼容性
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 7.0 | 4.0 (2) | 10 | 11.6 | 5.1 |
ArrayBuffer() without new throws |
? | 44 (44) | ? | ? | ? |
ArrayBuffer.slice() |
未实现 | (Yes) 未实现 53 (53) |
未实现 | 未实现 | ? |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | 4.0 | (Yes) | 4.0 (2) | 10 | 11.6 | 4.2 |
ArrayBuffer() without new throws |
? | ? | 44.0 (44) | ? | ? | ? |
ArrayBuffer.slice() |
未实现 | 未实现 | (Yes) 未实现 53.0 (53) |
未实现 | 未实现 | ? |
兼容性提醒
从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);