edit string & promise

This commit is contained in:
ruanyf
2015-10-02 12:10:21 +08:00
parent 8ef1e5a876
commit 6c3396809c
5 changed files with 220 additions and 66 deletions
+11 -9
View File
@@ -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与操作系统的原生接口进行二进制通信。
二进制数组由三对象组成。
二进制数组由三对象组成。
**1ArrayBuffer对象**:代表内存之中的一段二进制数据,可以通过“视图”进行操作。“视图”部署了数组接口,这意味着,可以用数组的方法操作内存。
**2) TypedArray对象**用来生成内存的视图,通过9个构造函数,可以生成9种数据格式的视图,比如Uint8Array(无符号8位整数)数组视图, Int16Array16位整数)数组视图, Float32Array(32位浮点数)数组视图等等。
**2) TypedArray视图**共包括9种类型的视图,比如Uint8Array(无符号8位整数)数组视图, Int16Array16位整数)数组视图, Float32Array(32位浮点数)数组视图等等。
**3DataView对象**用来生成内存的视图,可以自定义格式和字节序,比如第一个字节是Uint8(无符号8位整数)、第二、三个字节是Int16(16位整数)、第四个字节开始是Float32(32位浮点数)等等。
**3DataView视图**可以自定义复合格式的视图,比如第一个字节是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`数组的成员是连续的,不会有空位。