From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../global_objects/arraybuffer/index.html | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.html (limited to 'files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.html') diff --git a/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.html b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.html new file mode 100644 index 0000000000..a98aca4290 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.html @@ -0,0 +1,161 @@ +--- +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")}} 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。

+
+ +
{{EmbedInteractiveExample("pages/js/arraybuffer-constructor.html")}}
+ + + +

语法

+ +
new ArrayBuffer(length)
+
+ +

参数

+ +
+
length
+
要创建的 ArrayBuffer 的大小,单位为字节。
+
+ +

返回值

+ +

一个指定大小的 ArrayBuffer 对象,其内容被初始化为 0。

+ +

异常

+ +

如果 length 大于 {{jsxref("Number.MAX_SAFE_INTEGER")}}(>= 2 ** 53)或为负数,则抛出一个  {{jsxref("RangeError")}}  异常。

+ +

描述

+ +

ArrayBuffer 构造函数用来创建一个指定字节长度的 ArrayBuffer 对象。

+ +

以现有数据获取 ArrayBuffer

+ + + +

属性

+ +
+
ArrayBuffer.length
+
ArrayBuffer 构造函数的 length 属性,其值为1。
+
+ +
+
{{jsxref("ArrayBuffer.prototype.byteLength")}}
+
只读属性,表示 ArrayBuffer 的byte的大小,在ArrayBuffer构造完成时生成,不可改变。
+
+ +
+
{{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}}
+
返回 ArrayBuffer 的构造函数。
+
{{jsxref("ArrayBuffer.prototype")}}
+
通过 ArrayBuffer 的原型对象可以为所有 ArrayBuffer 对象添加属性。
+
+ +

方法

+ +
+
{{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(arg)")}}
+
如果参数是 ArrayBuffer 的视图实例则返回 true,例如 类型数组对象 或 {{jsxref("DataView")}} 对象;否则返回 false
+
{{jsxref("ArrayBuffer.transfer", "ArrayBuffer.transfer(oldBuffer [, newByteLength])")}} {{experimental_inline}}
+
+

返回一个新的 ArrayBuffer 对象,其内容取自 oldBuffer 中的数据,并且根据 newByteLength 的大小对数据进行截取或补 0。

+
+
+ +

ArrayBuffer 实例

+ +

所有 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','方法')}}

+ +
+
{{jsxref("ArrayBuffer.slice()")}} {{non-standard_inline}}
+
和 {{jsxref("ArrayBuffer.prototype.slice()")}} 功能相同。
+
+ +

示例

+ +

下面的例子创建了一个 8 字节的缓冲区,并使用一个 {{jsxref("Global_Objects/Int32Array", "Int32Array")}} 来引用它:

+ +
var buffer = new ArrayBuffer(8);
+var view   = new Int32Array(buffer);
+
+ +

规范

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{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')}}
+ +

浏览器兼容性

+ + + +

{{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);
+ +

相关链接

+ + -- cgit v1.2.3-54-g00ecf