1414
1515** (3)` DataView ` 视图** :可以自定义复合格式的视图,比如第一个字节是 Uint8(无符号 8 位整数)、第二、三个字节是 Int16(16 位整数)、第四个字节开始是 Float32(32 位浮点数)等等,此外还可以自定义字节序。
1616
17- 简单说,` ArrayBuffer ` 对象代表原始的二进制数据,TypedArray  视图用来读写简单类型的二进制数据,` DataView ` 视图用来读写复杂类型的二进制数据。
17+ 简单说,` ArrayBuffer ` 对象代表原始的二进制数据,` TypedArray ` 视图用来读写简单类型的二进制数据,` DataView ` 视图用来读写复杂类型的二进制数据。
1818
19- TypedArray  视图支持的数据类型一共有 9 种(` DataView ` 视图支持除` Uint8C ` 以外的其他 8 种)。
19+ ` TypedArray ` 视图支持的数据类型一共有 9 种(` DataView ` 视图支持除` Uint8C ` 以外的其他 8 种)。
2020
2121|  数据类型 |  字节长度 |  含义                             |  对应的 C 语言类型 | 
2222|  -------- |  -------- |  -------------------------------- |  ----------------- | 
@@ -64,7 +64,7 @@ dataView.getUint8(0) // 0
6464
6565上面代码对一段 32 字节的内存,建立` DataView ` 视图,然后以不带符号的 8 位整数格式,从头读取 8 位二进制数据,结果得到 0,因为原始内存的` ArrayBuffer ` 对象,默认所有位都是 0。
6666
67- 另一种  TypedArray  视图,与` DataView ` 视图的一个区别是,它不是一个构造函数,而是一组构造函数,代表不同的数据格式。
67+ 另一种` TypedArray ` 视图,与` DataView ` 视图的一个区别是,它不是一个构造函数,而是一组构造函数,代表不同的数据格式。
6868
6969``` javascript 
7070const  buffer  =  new  ArrayBuffer (12 );
@@ -79,7 +79,7 @@ x1[0] // 2
7979
8080上面代码对同一段内存,分别建立两种视图:32 位带符号整数(` Int32Array ` 构造函数)和 8 位不带符号整数(` Uint8Array ` 构造函数)。由于两个视图对应的是同一段内存,一个视图修改底层内存,会影响到另一个视图。
8181
82- TypedArray  视图的构造函数,除了接受` ArrayBuffer ` 实例作为参数,还可以接受普通数组作为参数,直接分配内存生成底层的` ArrayBuffer ` 实例,并同时完成对这段内存的赋值。
82+ ` TypedArray ` 视图的构造函数,除了接受` ArrayBuffer ` 实例作为参数,还可以接受普通数组作为参数,直接分配内存生成底层的` ArrayBuffer ` 实例,并同时完成对这段内存的赋值。
8383
8484``` javascript 
8585const  typedArray  =  new  Uint8Array ([0 ,1 ,2 ]);
@@ -89,7 +89,7 @@ typedArray[0] = 5;
8989typedArray //  [5, 1, 2]
9090``` 
9191
92- 上面代码使用  TypedArray  视图的` Uint8Array ` 构造函数,新建一个不带符号的 8 位整数视图。可以看到,` Uint8Array ` 直接使用普通数组作为参数,对底层内存的赋值同时完成。
92+ 上面代码使用` TypedArray ` 视图的` Uint8Array ` 构造函数,新建一个不带符号的 8 位整数视图。可以看到,` Uint8Array ` 直接使用普通数组作为参数,对底层内存的赋值同时完成。
9393
9494### ArrayBuffer.prototype.byteLength  
9595
@@ -128,7 +128,7 @@ const newBuffer = buffer.slice(0, 3);
128128
129129### ArrayBuffer.isView()  
130130
131- ` ArrayBuffer ` 有一个静态方法` isView ` ,返回一个布尔值,表示参数是否为` ArrayBuffer ` 的视图实例。这个方法大致相当于判断参数,是否为  TypedArray  实例或` DataView ` 实例。
131+ ` ArrayBuffer ` 有一个静态方法` isView ` ,返回一个布尔值,表示参数是否为` ArrayBuffer ` 的视图实例。这个方法大致相当于判断参数,是否为` TypedArray ` 实例或` DataView ` 实例。
132132
133133``` javascript 
134134const  buffer  =  new  ArrayBuffer (8 );
@@ -142,9 +142,9 @@ ArrayBuffer.isView(v) // true
142142
143143### 概述  
144144
145- ` ArrayBuffer ` 对象作为内存区域,可以存放多种类型的数据。同一段内存,不同数据有不同的解读方式,这就叫做“视图”(view)。` ArrayBuffer ` 有两种视图,一种是  TypedArray  视图,另一种是` DataView ` 视图。前者的数组成员都是同一个数据类型,后者的数组成员可以是不同的数据类型。
145+ ` ArrayBuffer ` 对象作为内存区域,可以存放多种类型的数据。同一段内存,不同数据有不同的解读方式,这就叫做“视图”(view)。` ArrayBuffer ` 有两种视图,一种是` TypedArray ` 视图,另一种是` DataView ` 视图。前者的数组成员都是同一个数据类型,后者的数组成员可以是不同的数据类型。
146146
147- 目前,TypedArray  视图一共包括 9 种类型,每一种视图都是一种构造函数。
147+ 目前,` TypedArray ` 视图一共包括 9 种类型,每一种视图都是一种构造函数。
148148
149149-  ** ` Int8Array ` ** :8 位有符号整数,长度 1 个字节。
150150-  ** ` Uint8Array ` ** :8 位无符号整数,长度 1 个字节。
@@ -156,7 +156,7 @@ ArrayBuffer.isView(v) // true
156156-  ** ` Float32Array ` ** :32 位浮点数,长度 4 个字节。
157157-  ** ` Float64Array ` ** :64 位浮点数,长度 8 个字节。
158158
159- 这 9 个构造函数生成的数组,统称为  TypedArray  视图。它们很像普通数组,都有` length ` 属性,都能用方括号运算符(` [] ` )获取单个元素,所有数组的方法,在它们上面都能使用。普通数组与 TypedArray 数组的差异主要在以下方面。
159+ 这 9 个构造函数生成的数组,统称为` TypedArray ` 视图。它们很像普通数组,都有` length ` 属性,都能用方括号运算符(` [] ` )获取单个元素,所有数组的方法,在它们上面都能使用。普通数组与 TypedArray 数组的差异主要在以下方面。
160160
161161-  TypedArray 数组的所有成员,都是同一种类型。
162162-  TypedArray 数组的成员是连续的,不会有空位。
@@ -207,7 +207,7 @@ const i16 = new Int16Array(buffer, 1);
207207
208208上面代码中,新生成一个 8 个字节的` ArrayBuffer ` 对象,然后在这个对象的第一个字节,建立带符号的 16 位整数视图,结果报错。因为,带符号的 16 位整数需要两个字节,所以` byteOffset ` 参数必须能够被 2 整除。
209209
210- 如果想从任意字节开始解读` ArrayBuffer ` 对象,必须使用` DataView ` 视图,因为  TypedArray  视图只提供 9 种固定的解读格式。
210+ 如果想从任意字节开始解读` ArrayBuffer ` 对象,必须使用` DataView ` 视图,因为` TypedArray ` 视图只提供 9 种固定的解读格式。
211211
212212** (2)TypedArray(length)** 
213213
@@ -224,7 +224,7 @@ f64a[2] = f64a[0] + f64a[1];
224224
225225** (3)TypedArray(typedArray)** 
226226
227- TypedArray 数组的构造函数,可以接受另一个  TypedArray  实例作为参数。
227+ TypedArray 数组的构造函数,可以接受另一个` TypedArray ` 实例作为参数。
228228
229229``` javascript 
230230const  typedArray  =  new  Int8Array (new  Uint8Array (4 ));
@@ -260,15 +260,15 @@ y[0] // 2
260260
261261** (4)TypedArray(arrayLikeObject)** 
262262
263- 构造函数的参数也可以是一个普通数组,然后直接生成  TypedArray  实例。
263+ 构造函数的参数也可以是一个普通数组,然后直接生成` TypedArray ` 实例。
264264
265265``` javascript 
266266const  typedArray  =  new  Uint8Array ([1 , 2 , 3 , 4 ]);
267267``` 
268268
269- 注意,这时  TypedArray  视图会重新开辟内存,不会在原数组的内存上建立视图。
269+ 注意,这时` TypedArray ` 视图会重新开辟内存,不会在原数组的内存上建立视图。
270270
271- 上面代码从一个普通的数组,生成一个 8 位无符号整数的  TypedArray  实例。
271+ 上面代码从一个普通的数组,生成一个 8 位无符号整数的` TypedArray ` 实例。
272272
273273TypedArray 数组也可以转换回普通数组。
274274
@@ -435,6 +435,7 @@ function getPlatformEndianness() {
435435``` javascript 
436436Int8Array .BYTES_PER_ELEMENT  //  1
437437Uint8Array .BYTES_PER_ELEMENT  //  1
438+ Uint8ClampedArray .BYTES_PER_ELEMENT  //  1
438439Int16Array .BYTES_PER_ELEMENT  //  2
439440Uint16Array .BYTES_PER_ELEMENT  //  2
440441Int32Array .BYTES_PER_ELEMENT  //  4
@@ -443,7 +444,7 @@ Float32Array.BYTES_PER_ELEMENT // 4
443444Float64Array .BYTES_PER_ELEMENT  //  8
444445``` 
445446
446- 这个属性在  TypedArray  实例上也能获取,即有` TypedArray.prototype.BYTES_PER_ELEMENT ` 。
447+ 这个属性在` TypedArray ` 实例上也能获取,即有` TypedArray.prototype.BYTES_PER_ELEMENT ` 。
447448
448449### ArrayBuffer 与字符串的互相转换  
449450
@@ -542,7 +543,7 @@ uint8c[0] // 0
542543
543544### TypedArray.prototype.buffer  
544545
545- TypedArray  实例的` buffer ` 属性,返回整段内存区域对应的` ArrayBuffer ` 对象。该属性为只读属性。
546+ ` TypedArray ` 实例的` buffer ` 属性,返回整段内存区域对应的` ArrayBuffer ` 对象。该属性为只读属性。
546547
547548``` javascript 
548549const  a  =  new  Float32Array (64 );
@@ -622,7 +623,7 @@ b.byteLength // 2
622623
623624### TypedArray.prototype.slice()  
624625
625- TypeArray 实例的` slice ` 方法,可以返回一个指定位置的新的  TypedArray  实例。
626+ TypeArray 实例的` slice ` 方法,可以返回一个指定位置的新的` TypedArray ` 实例。
626627
627628``` javascript 
628629let  ui8 =  Uint8Array .of (0 , 1 , 2 );
@@ -636,7 +637,7 @@ ui8.slice(-1)
636637
637638### TypedArray.of()  
638639
639- TypedArray 数组的所有构造函数,都有一个静态方法` of ` ,用于将参数转为一个  TypedArray  实例。
640+ TypedArray 数组的所有构造函数,都有一个静态方法` of ` ,用于将参数转为一个` TypedArray ` 实例。
640641
641642``` javascript 
642643Float32Array .of (0.151 , - 8 , 3.7 )
@@ -661,14 +662,14 @@ tarr[2] = 3;
661662
662663### TypedArray.from()  
663664
664- 静态方法` from ` 接受一个可遍历的数据结构(比如数组)作为参数,返回一个基于这个结构的  TypedArray  实例。
665+ 静态方法` from ` 接受一个可遍历的数据结构(比如数组)作为参数,返回一个基于这个结构的` TypedArray ` 实例。
665666
666667``` javascript 
667668Uint16Array .from ([0 , 1 , 2 ])
668669//  Uint16Array [ 0, 1, 2 ]
669670``` 
670671
671- 这个方法还可以将一种  TypedArray  实例,转为另一种。
672+ 这个方法还可以将一种` TypedArray ` 实例,转为另一种。
672673
673674``` javascript 
674675const  ui16  =  Uint16Array .from (Uint8Array .of (0 , 1 , 2 ));
@@ -719,7 +720,7 @@ struct someStruct {
719720
720721如果一段数据包括多种类型(比如服务器传来的 HTTP 数据),这时除了建立` ArrayBuffer ` 对象的复合视图以外,还可以通过` DataView ` 视图进行操作。
721722
722- ` DataView ` 视图提供更多操作选项,而且支持设定字节序。本来,在设计目的上,` ArrayBuffer ` 对象的各种  TypedArray  视图,是用来向网卡、声卡之类的本机设备传送数据,所以使用本机的字节序就可以了;而` DataView ` 视图的设计目的,是用来处理网络设备传来的数据,所以大端字节序或小端字节序是可以自行设定的。
723+ ` DataView ` 视图提供更多操作选项,而且支持设定字节序。本来,在设计目的上,` ArrayBuffer ` 对象的各种` TypedArray ` 视图,是用来向网卡、声卡之类的本机设备传送数据,所以使用本机的字节序就可以了;而` DataView ` 视图的设计目的,是用来处理网络设备传来的数据,所以大端字节序或小端字节序是可以自行设定的。
723724
724725` DataView ` 视图本身也是构造函数,接受一个` ArrayBuffer ` 对象作为参数,生成视图。
725726
@@ -734,7 +735,7 @@ const buffer = new ArrayBuffer(24);
734735const  dv  =  new  DataView (buffer);
735736``` 
736737
737- ` DataView ` 实例有以下属性,含义与  TypedArray  实例的同名方法相同。
738+ ` DataView ` 实例有以下属性,含义与` TypedArray ` 实例的同名方法相同。
738739
739740-  ` DataView.prototype.buffer ` :返回对应的 ArrayBuffer 对象
740741-  ` DataView.prototype.byteLength ` :返回占据的内存字节长度
0 commit comments