From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../arraybuffer/@@species/index.html | 70 +++++++++ .../arraybuffer/bytelength/index.html | 62 ++++++++ .../global_objects/arraybuffer/index.html | 161 +++++++++++++++++++++ .../global_objects/arraybuffer/isview/index.html | 87 +++++++++++ .../arraybuffer/prototype/index.html | 63 ++++++++ .../global_objects/arraybuffer/slice/index.html | 83 +++++++++++ .../global_objects/arraybuffer/transfer/index.html | 116 +++++++++++++++ 7 files changed, 642 insertions(+) create mode 100644 files/zh-cn/web/javascript/reference/global_objects/arraybuffer/@@species/index.html create mode 100644 files/zh-cn/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html create mode 100644 files/zh-cn/web/javascript/reference/global_objects/arraybuffer/index.html create mode 100644 files/zh-cn/web/javascript/reference/global_objects/arraybuffer/isview/index.html create mode 100644 files/zh-cn/web/javascript/reference/global_objects/arraybuffer/prototype/index.html create mode 100644 files/zh-cn/web/javascript/reference/global_objects/arraybuffer/slice/index.html create mode 100644 files/zh-cn/web/javascript/reference/global_objects/arraybuffer/transfer/index.html (limited to 'files/zh-cn/web/javascript/reference/global_objects/arraybuffer') diff --git a/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/@@species/index.html b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/@@species/index.html new file mode 100644 index 0000000000..fe99f2b076 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/@@species/index.html @@ -0,0 +1,70 @@ +--- +title: 'get ArrayBuffer[@@species]' +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species +tags: + - ArrayBuffer + - JavaScript + - TypedArrays + - 属性 +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/@@species +--- +
{{JSRef}}
+ +

该 ArrayBuffer[@@species] 访问器属性会返回 ArrayBuffer 构造器。

+ +

语法

+ +
ArrayBuffer[Symbol.species]
+
+ +

描述

+ +

这个 species 访问器属性会返回默认的 ArrayBuffer 构造器。子类构造器可能会覆盖它以改变构造器赋值。

+ +

示例

+ +

返回默认的 ArrayBuffer 构造器:

+ +
ArrayBuffer[Symbol.species]; // function ArrayBuffer()
+ +

在派生集合对象中(比如你定制的 array buffer MyArrayBuffer),MyArrayBuffer species 就是 MyArrayBuffer 构造器。但是,你可能想要在派生类里重写它,以期返回的是父类的 ArrayBuffer 对象:

+ +
class MyArrayBuffer extends ArrayBuffer {
+  // Overwrite MyArrayBuffer species to the parent ArrayBuffer constructor
+  static get [Symbol.species]() { return ArrayBuffer; }
+}
+ +

规范

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES6', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}{{Spec2('ES6')}}Initial definition.
{{SpecName('ESDraft', '#sec-get-arraybuffer-@@species', 'get ArrayBuffer [ @@species ]')}}{{Spec2('ESDraft')}} 
+ +

浏览器支持

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.@@species")}}

+ +

相关

+ + diff --git a/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html new file mode 100644 index 0000000000..af8868a563 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/bytelength/index.html @@ -0,0 +1,62 @@ +--- +title: ArrayBuffer.prototype.byteLength +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength +--- +
{{JSRef}}
+ +

byteLength访问器属性表示一个{{jsxref("ArrayBuffer")}} 对象的字节长度。

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

语法

+ +
arraybuffer.byteLength
+ +

描述

+ +

byteLength属性是一个访问器属性,它的set访问器函数是undefined,这意味着你只能读这个属性。 该值在数组创建时确定,并且不可变更。如果这个ArrayBuffer 被移除,则此属性返回0。

+ +

 

+ +

示例

+ +
var buffer = new ArrayBuffer(8);
+buffer.byteLength; // 8
+
+ +

规范

+ + + + + + + + + + + + + + + + + + + +
规范状态备注
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Superseded by ECMAScript 6.
{{SpecName('ES6', '#sec-get-arraybuffer.prototype.bytelength', 'ArrayBuffer.prototype.byteLength')}}{{Spec2('ES6')}}Initial definition in an ECMA standard.
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.byteLength")}}

+ +

相关链接

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

相关链接

+ + diff --git a/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/isview/index.html b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/isview/index.html new file mode 100644 index 0000000000..2b545d9c03 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/isview/index.html @@ -0,0 +1,87 @@ +--- +title: ArrayBuffer.isView() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView +tags: + - 类型数组 + - 缓冲区 +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView +--- +
{{JSRef}}
+ +

ArrayBuffer.isView() 方法用来判断传入的参数值是否是一种 ArrayBuffer 视图(view),比如类型化数组对象(typed array objects)或者数据视图( {{jsxref("DataView")}})。

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

语法

+ +
ArrayBuffer.isView(value)
+ +

参数

+ +
+
value
+
被检测的值。
+
+ +

返回值

+ +
+
true
+
如果提供的参数是一种 {{jsxref("ArrayBuffer")}} 视图;
+
false
+
提供的参数不是一种 {{jsxref("ArrayBuffer")}} 视图类型;
+
+ +

示例

+ +
ArrayBuffer.isView();                    // false
+ArrayBuffer.isView([]);                  // false
+ArrayBuffer.isView({});                  // false
+ArrayBuffer.isView(null);                // false
+ArrayBuffer.isView(undefined);           // false
+ArrayBuffer.isView(new ArrayBuffer(10)); // false
+
+ArrayBuffer.isView(new Uint8Array());    // true
+ArrayBuffer.isView(new Float32Array());  // true
+ArrayBuffer.isView(new Int8Array(10).subarray(0, 3)); // true
+
+var buffer = new ArrayBuffer(2);
+var dv = new DataView(buffer);
+ArrayBuffer.isView(dv); // true
+
+ +

规范

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Superseded by ECMAScript 6.
{{SpecName('ES6', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}{{Spec2('ES6')}}Initial definition in an ECMA standard.
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.isView")}}

+ +

另见

+ + diff --git a/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/prototype/index.html b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/prototype/index.html new file mode 100644 index 0000000000..376e969064 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/prototype/index.html @@ -0,0 +1,63 @@ +--- +title: ArrayBuffer.prototype +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/prototype +tags: + - ArrayBuffer +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer +--- +
{{JSRef}}
+ +

ArrayBuffer.prototype属性表示{{jsxref("ArrayBuffer")}}对象的原型。

+ +
{{js_property_attributes(0,0,0)}}
+ +
 
+ +

描述

+ +

ArrayBuffer 实例继承自ArrayBuffer.prototype。对所有的构造函数来说,你可以通过改变构造函数的原型对象来改变所有的ArrayBuffer实例。

+ +

属性

+ +
+
ArrayBuffer.prototype.constructor
+
指定函数,它创建一个对象的原型。其初始值是标准ArrayBuffer内置构造函数。
+
{{jsxref("ArrayBuffer.prototype.byteLength")}} {{readonlyInline}}
+
数组的字节大小。在数组创建时确定,并且不可变更。只读
+
+ +

方法

+ +
+
{{jsxref("ArrayBuffer.prototype.slice()")}}
+
返回一个新的 ArrayBuffer ,它的内容是这个 ArrayBuffer 的字节副本,从begin(包括),到end(不包括)。如果begin或end是负数,则指的是从数组末尾开始的索引,而不是从头开始。
+
+ +

规范

+ + + + + + + + + + + + + + +
规范状态备注
{{SpecName('ES6', '#sec-arraybuffer.prototype', 'ArrayBuffer.prototype')}}{{Spec2('ES6')}}初始定义
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.prototype")}}

+ +

相关链接

+ + diff --git a/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/slice/index.html b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/slice/index.html new file mode 100644 index 0000000000..2c03d1e13c --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/slice/index.html @@ -0,0 +1,83 @@ +--- +title: ArrayBuffer.prototype.slice() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice +translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice +--- +
{{JSRef}}
+ +

slice()方法返回一个新的 ArrayBuffer ,它的内容是这个ArrayBuffer的字节副本,从begin(包括),到end(不包括)。

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

语法

+ +
arraybuffer.slice(begin[, end])
+ +

参数

+ +
+
begin
+
从零开始的字节索引,切片从这开始。
+
+ +
+
end
+
结束切片的字节索引。如果没指定end,新的 ArrayBuffer 将包含这个 ArrayBuffer 从头到尾的所有字节。由begin和end指定的这个范围夹在当前数组的有效索引范围内。如果新ArrayBuffer的长度在计算后为负,它将强制为0 。
+
+ +

返回值

+ +

 一个新的 ArrayBuffer 对象。

+ +

描述

+ +

slice 方法复制到但不包括由end参数指示的字节。如果begin或end是负数,则指的是从数组末尾开始的索引,而不是从头开始。

+ +

示例

+ +

复制一个 ArrayBuffer

+ +
var buf1 = new ArrayBuffer(8);
+var buf2 = buf1.slice(0);
+
+ +

规范

+ + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('Typed Array')}}{{Spec2('Typed Array')}}Superseded by EMCAScript 6.
{{SpecName('ES6', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}{{Spec2('ES6')}}Initial definition in an ECMA standard.
{{SpecName('ESDraft', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}{{Spec2('ESDraft')}} 
+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.slice")}}

+ +

相关链接

+ + diff --git a/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/transfer/index.html b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/transfer/index.html new file mode 100644 index 0000000000..cf3185f637 --- /dev/null +++ b/files/zh-cn/web/javascript/reference/global_objects/arraybuffer/transfer/index.html @@ -0,0 +1,116 @@ +--- +title: ArrayBuffer.transfer() +slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/transfer +translation_of: Archive/Web/JavaScript/ArrayBuffer.transfer +--- +
{{JSRef}} {{SeeCompatTable}}
+ +

 静态ArrayBuffer.transfer() 方法返回一个新的ArrayBuffer, 其内容取自oldBuffer的数据,并且根据 newByteLength 的大小来对数据进行截取或者以0扩展。 如果 newByteLength 未定义,则使用 oldBuffer 的byteLength。这个操作使得 oldBuffer 处于被移除的状态。

+ +

语法

+ +
ArrayBuffer.transfer(oldBuffer [, newByteLength]);
+ +

参数

+ +
+
oldBuffer
+
 要转移的{{jsxref("ArrayBuffer")}}对象。
+
newByteLength
+
ArrayBuffer 对象的字节长度。
+
+ +

返回值

+ +

一个新的ArrayBuffer对象。

+ +

描述

+ +

ArrayBuffer.transfer()方法允许你增长和移除 ArrayBuffer 对象。不需复制就能增长一个ArrayBuffer的功能,对于大的缓冲区来说,有速度优势 (类似realloc) 。当释放底层内存时,移除ArrayBuffer的功能给开发者提供了显式控制。这避免了必须丢弃所有引用和等待垃圾回收。

+ +

示例

+ +
var buf1 = new ArrayBuffer(40);
+new Int32Array(buf1)[0] = 42;
+
+var buf2 = ArrayBuffer.transfer(buf1, 80);
+buf1.byteLength; // 0 but if you use the polyfill then the value is still 40
+buf2.byteLength; // 80
+new Int32Array(buf2)[0]; // 42
+
+var buf3 = ArrayBuffer.transfer(buf2, 0);
+buf2.byteLength; // 0 but if you use the polyfill then the value is still 80
+buf3.byteLength; // 0
+
+ +

Polyfill

+ +

You can partially work around this by inserting the following code at the beginning of your scripts, allowing use of much of the functionality of transfer() in implementations that do not natively support it. This is not the exact equivalent of this API, but this function transfers data from one ArrayBuffer to another ArrayBuffer.

+ +
if(!ArrayBuffer.transfer) {
+    ArrayBuffer.transfer = function (source, length) {
+        source = Object(source);
+        var dest = new ArrayBuffer(length);
+        if(!(source instanceof ArrayBuffer) || !(dest instanceof ArrayBuffer)) {
+            throw new TypeError("Source and destination must be ArrayBuffer instances");
+        }
+        if(dest.byteLength >= source.byteLength) {
+            var nextOffset = 0;
+            var leftBytes = source.byteLength;
+            var wordSizes = [8, 4, 2, 1];
+            wordSizes.forEach(function (_wordSize_) {
+                if (leftBytes >= _wordSize_) {
+                    var done = transferWith(_wordSize_, source, dest, nextOffset, leftBytes);
+                    nextOffset = done.nextOffset;
+                    leftBytes = done.leftBytes;
+                }
+            });
+        }
+        return dest;
+        function transferWith(wordSize, source, dest, nextOffset, leftBytes) {
+            var ViewClass = Uint8Array;
+            switch (wordSize)  {
+                case 8:
+                    ViewClass = Float64Array;
+                    break;
+                case 4:
+                    ViewClass = Float32Array;
+                    break;
+                case 2:
+                    ViewClass = Uint16Array;
+                    break;
+                case 1:
+                    ViewClass = Uint8Array;
+                    break;
+                default:
+                    ViewClass = Uint8Array;
+                    break;
+            }
+            var view_source = new ViewClass(source, nextOffset, Math.trunc(leftBytes / wordSize));
+            var view_dest = new ViewClass(dest, nextOffset, Math.trunc(leftBytes / wordSize));
+            for(var i=0; i<view_dest.length; i++) {
+                view_dest[i] = view_source[i];
+            }
+            return {
+                nextOffset : view_source.byteOffset + view_source.byteLength,
+                leftBytes : source.byteLength - (view_source.byteOffset + view_source.byteLength)
+            }
+        }
+    };
+}
+ +

规范

+ +

Not part of any current specification draft document, but has been proposed for a future ECMA-262 edition.

+ +

浏览器兼容性

+ + + +

{{Compat("javascript.builtins.ArrayBuffer.transfer")}}

+ +

相关链接

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