说明
数组是可以容纳很多不同元素的JavaScript对象。
var complexArr = [1,5,"2","Word",{"name":"James"}];
基本上在后台发生的情况是,您的浏览器将自动为该数组提供适当的内存空间。如果您添加或删除数据,它也将根据需要进行更改。
然而,在高性能和不同元素类型的世界中,有时您需要更具体地指出数组的内存量。
类型化数组 是这个问题的答案。您现在可以说出要给出数组的内存多少。以下是可用数组的不同类型的基本概述,该数组中每个元素的大小(以字节为单位)。
类型 | 每个元素大小(以字节为单位) |
---|---|
Int8Array | 1 |
Uint8Array | 1 |
Uint8ClampedArray | 1 |
Int16Array | 2 |
Uint16Array | 2 |
Int32Array | 4 |
Uint32Array | 4 |
Float32Array | 4 |
Float64Array | 8 |
创建这些数组有两种方法。一种方法是直接创建它。下面是如何创建一个长度为3的Int16Array
。
var i8 = new Int16Array(3);
console.log(i8);
//返回[0,0,0]
您还可以创建一个 buffer,以分配您希望数组占用的数据量(以字节为单位)。
注意
要使用缓冲区创建类型化的数组,您需要将字节数分配为上面列出的字节的倍数。
//创建不同的Int16Array数组
var byteSize = 6; //需要是2的倍数
var buffer = new ArrayBuffer(byteSize);
var i8View = new Int16Array(buffer);
buffer.byteLength; //返回6
i8View.byteLength; //返回6
console.log(i8View); //返回[0,0,0]
buffer是只传递数据的通用对象。您无法正常访问它们。要访问它们,您需要先创建一个 view。
i8View[0] = 42;
console.log(i8View); //返回[42,0,0]
注意
类型化数组不具有正常数组的一些方法,例如.pop()
或.push()
。类型化数组用Array.isArray()
来检查对象是否是数组。虽然更简单,但是对于不太精巧的JavaScript引擎来实现它们可能是一个优势。
练习
首先创建一个64字节的buffer
。然后创建一个i32View
类型的数组,其视图称为Int32Array
。
- 你的
buffer
应该是64字节大。 - 您的 buffer 的
i32View
视图应该是64字节大。 - 您的 buffer 的
i32View
视图应该是16个元素长。
var buffer;
var i32View;
答案
方法 | 说明 |
var | 声明一个变量,并可选地将其初始化为一个值。 |
new | 创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 |
ArrayBuffer () | 用于表示通用的固定长度原始二进制数据缓冲区。 |
Int32Array () | 表示在平台顺序字节中一个双补码32位有符号的整型数组。 |
console.log() | 用于在控制台输出信息(浏览器按下 F12 打开控制台)。 |
//创建不同的Int16Array数组
var byteSize = 64; //需要是2的倍数
var buffer = new ArrayBuffer(byteSize);
var i32View = new Int32Array(buffer);
console.log(buffer,i32View);
运行结果