mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2024-04-21 12:32:22 +00:00
edit string & promise
This commit is contained in:
+11
-9
@@ -1,20 +1,22 @@
|
||||
# 二进制数组
|
||||
|
||||
二进制数组(ArrayBuffer对象、TypedArray对象、DataView对象)是JavaScript操作二进制数据的一个接口。这些对象早就存在,属于独立的规格,ES6将它们纳入了ECMAScript规格,并且增加了新的方法。
|
||||
二进制数组(ArrayBuffer对象、TypedArray视图和DataView视图)是JavaScript操作二进制数据的一个接口。这些对象早就存在,属于独立的规格,ES6将它们纳入了ECMAScript规格,并且增加了新的方法。
|
||||
|
||||
这个接口的原始设计目的,与WebGL项目有关。所谓WebGL,就是指浏览器与显卡之间的通信接口,为了满足JavaScript与显卡之间大量的、实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文本格式。文本格式传递一个32位整数,两端的JavaScript脚本与显卡都要进行格式转化,将非常耗时。这时要是存在一种机制,可以像C语言那样,直接操作字节,将4个字节的32位整数,以二进制形式原封不动地送入显卡,脚本的性能就会大幅提升。
|
||||
|
||||
二进制数组就是在这种背景下诞生的。它很像C语言的数组,允许开发者以数组下标的形式,直接操作内存,大大增强了JavaScript处理二进制数据的能力,使得开发者有可能通过JavaScript与操作系统的原生接口进行二进制通信。
|
||||
|
||||
二进制数组由三个对象组成。
|
||||
二进制数组由三类对象组成。
|
||||
|
||||
**(1)ArrayBuffer对象**:代表内存之中的一段二进制数据,可以通过“视图”进行操作。“视图”部署了数组接口,这意味着,可以用数组的方法操作内存。
|
||||
|
||||
**(2) TypedArray对象**:用来生成内存的视图,通过9个构造函数,可以生成9种数据格式的视图,比如Uint8Array(无符号8位整数)数组视图, Int16Array(16位整数)数组视图, Float32Array(32位浮点数)数组视图等等。
|
||||
**(2) TypedArray视图**:共包括9种类型的视图,比如Uint8Array(无符号8位整数)数组视图, Int16Array(16位整数)数组视图, Float32Array(32位浮点数)数组视图等等。
|
||||
|
||||
**(3)DataView对象**:用来生成内存的视图,可以自定义格式和字节序,比如第一个字节是Uint8(无符号8位整数)、第二、三个字节是Int16(16位整数)、第四个字节开始是Float32(32位浮点数)等等。
|
||||
**(3)DataView视图**:可以自定义复合格式的视图,比如第一个字节是Uint8(无符号8位整数)、第二、三个字节是Int16(16位整数)、第四个字节开始是Float32(32位浮点数)等等,此外还可以自定义字节序。
|
||||
|
||||
简单说,ArrayBuffer对象代表原始的二进制数据,TypedArray对象代表确定类型的二进制数据,DataView对象代表不确定类型的二进制数据。它们支持的数据类型一共有9种(DataView对象支持除Uint8C以外的其他8种)。
|
||||
简单说,ArrayBuffer对象代表原始的二进制数据,TypedArray视图用来读写简单类型的二进制数据,DataView视图用来读写复杂类型的二进制数据。
|
||||
|
||||
TypedArray视图支持的数据类型一共有9种(DataView视图支持除Uint8C以外的其他8种)。
|
||||
|
||||
数据类型 | 字节长度 | 含义 | 对应的C语言类型
|
||||
--------|--------|----|---------------
|
||||
@@ -134,13 +136,13 @@ var v = new Int32Array(buffer);
|
||||
ArrayBuffer.isView(v) // true
|
||||
```
|
||||
|
||||
## TypedArray对象
|
||||
## TypedArray视图
|
||||
|
||||
### 概述
|
||||
|
||||
`ArrayBuffer`对象作为内存区域,可以存放多种类型的数据。同一段内存,不同数据有不同的解读方式,这就叫做“视图”(view)。`ArrayBuffer`有两种视图,一种是TypedArray视图,另一种是DataView视图,两者的区别主要是字节序,前者的数组成员都是同一个数据类型,后者的数组成员可以是不同的数据类型。
|
||||
`ArrayBuffer`对象作为内存区域,可以存放多种类型的数据。同一段内存,不同数据有不同的解读方式,这就叫做“视图”(view)。`ArrayBuffer`有两种视图,一种是TypedArray视图,另一种是DataView视图。前者的数组成员都是同一个数据类型,后者的数组成员可以是不同的数据类型。
|
||||
|
||||
目前,TypedArray对象一共提供9种类型的视图,每一种视图都是一种构造函数。
|
||||
目前,TypedArray视图一共包括9种类型,每一种视图都是一种构造函数。
|
||||
|
||||
- **Int8Array**:8位有符号整数,长度1个字节。
|
||||
- **Uint8Array**:8位无符号整数,长度1个字节。
|
||||
@@ -152,7 +154,7 @@ ArrayBuffer.isView(v) // true
|
||||
- **Float32Array**:32位浮点数,长度4个字节。
|
||||
- **Float64Array**:64位浮点数,长度8个字节。
|
||||
|
||||
这9个构造函数生成的对象,统称为TypedArray对象。它们很像普通数组,都有`length`属性,都能用方括号运算符(`[]`)获取单个元素,所有数组的方法,在TypedArray数组上面都能使用。普通数组与TypedArray数组的差异主要在以下方面。
|
||||
这9个构造函数生成的数组,统称为TypedArray视图。它们很像普通数组,都有`length`属性,都能用方括号运算符(`[]`)获取单个元素,所有数组的方法,在它们上面都能使用。普通数组与TypedArray数组的差异主要在以下方面。
|
||||
|
||||
- `TypedArray`数组的所有成员,都是同一种类型。
|
||||
- `TypedArray`数组的成员是连续的,不会有空位。
|
||||
|
||||
Reference in New Issue
Block a user