--- title: ArrayBuffer slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer tags: - ArrayBuffer - JavaScript - 构造函数 - 类型数组 translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer ---
{{JSRef}}
ArrayBuffer
对象用来表示通用的、固定长度的原始二进制数据缓冲区。
它是一个字节数组,通常在其他语言中称为“byte array”。
你不能直接操作 ArrayBuffer
的内容,而是要通过类型数组对象或 {{jsxref("DataView")}} 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。
new ArrayBuffer(length)
length
ArrayBuffer
的大小,单位为字节。一个指定大小的 ArrayBuffer
对象,其内容被初始化为 0。
如果 length 大于 {{jsxref("Number.MAX_SAFE_INTEGER")}}(>= 2 ** 53)或为负数,则抛出一个 {{jsxref("RangeError")}} 异常。
ArrayBuffer
构造函数用来创建一个指定字节长度的 ArrayBuffer
对象。
ArrayBuffer.length
ArrayBuffer
的byte的大小,在ArrayBuffer构造完成时生成,不可改变。true
,例如 类型数组对象 或 {{jsxref("DataView")}} 对象;否则返回 false
。返回一个新的 ArrayBuffer 对象,其内容取自 oldBuffer
中的数据,并且根据 newByteLength
的大小对数据进行截取或补 0。
所有 ArrayBuffer
实例都会从 {{jsxref("ArrayBuffer.prototype")}} 继承属性和方法。
{{page('zh-CN/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/prototype','属性')}}
{{page('zh-CN/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/prototype','方法')}}
下面的例子创建了一个 8 字节的缓冲区,并使用一个 {{jsxref("Global_Objects/Int32Array", "Int32Array")}} 来引用它:
var buffer = new ArrayBuffer(8);
var view = new Int32Array(buffer);
Specification | Status | Comment |
---|---|---|
{{SpecName('Typed Array')}} | {{Spec2('Typed Array')}} | 已被 ECMAScript 6 中的 ArrayBuffer 取代 |
{{SpecName('ES6', '#sec-arraybuffer-constructor', 'ArrayBuffer')}} | {{Spec2('ES6')}} | 在 ECMA 标准中的初始定义。规定了必须通过 new 来调用构造函数 |
{{SpecName('ESDraft', '#sec-arraybuffer-constructor', 'ArrayBuffer')}} | {{Spec2('ESDraft')}} |
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
{{Compat("javascript.builtins.ArrayBuffer")}}
从 ECMAScript 2015 开始,ArrayBuffer
对象需要用 {{jsxref("Operators/new", "new")}} 运算符创建。如果调用构造函数时没有使用 new
,将会抛出 {{jsxref("TypeError")}} 异常。
var dv = ArrayBuffer(10); // TypeError: calling a builtin ArrayBuffer constructor // without new is forbidden
var dv = new ArrayBuffer(10);