时隔一年半,再次来到博客园。回首刚接触前端时所写的两篇随笔,无法直视啊~
----------------------------------------------------------------------------♠
简介:
ArrayBuffer又称类型化数组。
javascript数组(Array)长什么样子,相信大家都清楚,那么我说说差别应该就可以了解这究竟是个什么了!
数组里面可以放数字、字符串、布尔值以及对象和数组等,ArrayBuffer放0和1组成的二进制数据
数组放在堆中,ArrayBuffer则把数据放在栈中(所以取数据时后者快)
ArrayBuffer初始化后固定大小,数组则可以自由增减。(准确的说,视图才应该跟数组来比较这个特点)
构造函数:
//new ArrayBuffer(Bytelength);
var arraybuffer = new ArrayBuffer(8);//类方法ArrayBuffer.isView() 判断某对象是否为 视图(这是什么?往下看)
var int8a = newInt8Array(arraybuffer);
ArrayBuffer.isView(int8a)//return true
//类属性ArrayBuffer.length 默认值1,暂未发现用处
ArrayBuffer.length //return 1
//返回的对象具有byteLength属性 值为参数Bytelength
arraybuffer.byteLength //return 8
如上所诉:实例化一个对象的时候,仅需要传入一个参数,即字节数。
字节(Byte):存储空间的基本计量单位。一个字节等于8位(bit),每一位用0或1表示。
如下为两个字节(16个格子):
1
0
1
1
0
0
0
1
0
1
0
0
1
0
1
0
视图:
ArrayBuffer对象并没有提供任何读写内存的方法,而是允许在其上方建立“视图”,从而插入与读取内存中的数据。如上:我们在内存中分配了16个格子也就是两个字节,如果我们要划分出A视图与B视图来瓜分这16个格子的话,代码是这样的:
var arraybuffer = new ArrayBuffer(8);var aView = new Int8Array(arraybuffer,0,1);var bView = new Int8Array(arraybuffer,1,1);
aView[0] = 1; //二进制00000001
bView[0] = 2; //二进制00000010
格子变成这样了:
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
前8位表示数字1,后8位表示数字2
视图类型
视图类型
数据类型
占用位数
占用字节
有无符号
Int8A