# 数组

> 数组是一种线性表数据结构。它用一组连续的内存空间，来存储一组具有相同类型的数据。 ——数据结构与算法之美

![](https://3490195898-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LnQxDcxCKODvYvTUWe3%2F-LxdeOcQj3-2pR7M4G10%2F-Lxe-cFdK5yIbgG8DQCC%2Fimage.png?alt=media\&token=ec57e7a6-3c17-48f1-910d-05bab294d866)

js 原本没有真正的数组，因为 js 的数组可以存放不同类型的数据，不同数据类型存储所需要的空间大小不同，这就导致用来存放数组的内存地址不可能是连续的。所以 **js 的数组是按照类似哈希映射的方法存储的**，这种方式的数组读写操作相对低效。

v8 引擎对数组做了优化，如果一个数组中所有的类型都是一样的，那么就在内存中开辟一个连续的空间来储存数组。但是如果数组中又添加了一个不同的类型，那么 v8 引擎就会按之前的老办法将数组重建，这时反而会更低效。

ES6 的新增了 `ArrayBuffer` ，它可以创建内存空间连续的数组。显而易见，对通过 `ArrayBuffer` 创建的数组进行遍历操作，速度更快。<br>

![](https://3490195898-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LnQxDcxCKODvYvTUWe3%2F-LxdeOcQj3-2pR7M4G10%2F-Lxe-hzIKYlOaStOHDax%2Fimage.png?alt=media\&token=957dc2d1-7ff3-4bc3-9704-a98cafbb8c77)
