diff --git a/docs/arraybuffer.md b/docs/arraybuffer.md index af77d9b..5688ac3 100644 --- a/docs/arraybuffer.md +++ b/docs/arraybuffer.md @@ -1,6 +1,6 @@ # 二进制数组 -二进制数组(ArrayBuffer对象、TypedArray视图和DataView视图)是JavaScript操作二进制数据的一个接口。这些对象早就存在,属于独立的规格,ES6将它们纳入了ECMAScript规格,并且增加了新的方法。 +二进制数组(ArrayBuffer对象、TypedArray视图和DataView视图)是JavaScript操作二进制数据的一个接口。这些对象早就存在,属于独立的规格(2011年2月发布),ES6将它们纳入了ECMAScript规格,并且增加了新的方法。 这个接口的原始设计目的,与WebGL项目有关。所谓WebGL,就是指浏览器与显卡之间的通信接口,为了满足JavaScript与显卡之间大量的、实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文本格式。文本格式传递一个32位整数,两端的JavaScript脚本与显卡都要进行格式转化,将非常耗时。这时要是存在一种机制,可以像C语言那样,直接操作字节,将4个字节的32位整数,以二进制形式原封不动地送入显卡,脚本的性能就会大幅提升。 @@ -464,7 +464,7 @@ function str2ab(str) { 不同的视图类型,所能容纳的数值范围是确定的。超出这个范围,就会出现溢出。 -TypedArray数组对于溢出,采用的处理方法是求余值。正向溢出(overflow)等于,当前数据类型的最小值加上余值,再减去1;负向溢出(underflow)等于当前数据类型的最大值减去余值,再加上1。 +TypedArray数组对于溢出,采用的处理方法是求余值。正向溢出(overflow)的含义是输入值大于当前数据类型的最大值,最后得到的值就等于当前数据类型的最小值加上余值,再减去1;负向溢出(underflow)等于当前数据类型的最大值减去余值,再加上1。 ```javascript var uint8 = new Uint8Array(1); @@ -476,7 +476,7 @@ uint8[0] = -1; uint8[0] // 255 ``` -上面例子中,8位无符号整数的数值范围是0到255,超出这个范围,就是溢出。256相当于正向溢出1,回到最小值0;-1相当于负向溢出1,回到最大值255。 +上面例子中,8位无符号整数的数值范围是0到255,超出这个范围,就是溢出。256相当于正向溢出1,即余值为1,最后的值等于0(`0 + 1 -1`);-1相当于负向溢出1,余值也为1,最后的值等于255(`255 - 1 + 1`)。 下面是8位带符号整数的例子。 @@ -609,6 +609,22 @@ Float32Array.of(0.151, -8, 3.7) // Float32Array [ 0.151, -8, 3.7 ] ``` +下面三种方法都会生成同样一个TypedArray数组。 + +```javascript +// 方法一 +let tarr = new Uint8Array([1,2,3]); + +// 方法二 +let tarr = Uint8Array.of(1,2,3); + +// 方法三 +let tarr = new Uint8Array(3); +tarr[0] = 0; +tarr[1] = 1; +tarr[2] = 2; +``` + ### TypedArray.from() 静态方法`from`接受一个可遍历的数据结构(比如数组)作为参数,返回一个基于这个结构的TypedArray实例。 @@ -883,7 +899,7 @@ reader.onload = function () { }; ``` -下面以处理bmp文件为例。假定file变量是一个指向bmp文件的文件对象,首先读取文件。 +下面以处理bmp文件为例。假定`file`变量是一个指向bmp文件的文件对象,首先读取文件。 ```javascript var reader = new FileReader();