最近在纠结一个问题,就是数组这个引用类型在JavaScript 中是不是和其他语言一样开辟了一个连续的内存来存储,但是在JS 中每个元素又可以是不同的类型,这就导致了没办法用一个相同大小的存储,所以数组究竟是如何在JS 存储的呢? 难道它是一个“假数组”?

结论:

参考了一些网上的文章,直接上总结吧。

  1. JS中有快数组和慢数组之分:

    • 快数组:

      是一种线性的存储方式,内部存储是连续的内存;

      可能需要开辟一大块供其使用,其中还可能有很多空洞,是比较费内存的;

      空间连续的,遍历速度很快;
    • 慢数组:

      慢数组是一种字典的内存形式,在内存中是零散分配的;

      遍历效率较差;

      【注】:不用开辟大块连续的存储空间,节省了内存,但是由于需要维护这样一个HashTable,其效率会比快数组低,V8中是以Dictionary的结构实现的慢数组;
    • 快慢数组的转换:(具体参考下面的链接)

      从源码中我们可以得出结论:

      • 如果快数组扩容后的容量是原来的 3 倍以上,意味着它比 HashTable 形式存储占用更大的内存,快数组会转换为慢数组;
      • 如果快数组新增的索引与原来最大索引的差值大于 1024,快数组会被转换会慢数组。(之前的例子:[(arr.length + 1026) - (arr.length - 1)] = 1027 > 1024,故 arr 由快数组转为慢数组。)
  2. 类型化数组(Typed Arrays)

    JavaScript 类型化数组是一种类似数组的对象,并提供了一种用于访问原始二进制数据的机制。

    由缓冲和视图两部分: 缓冲是由ArrayBuffer实现,视图时由DataView来实现:

    • ArrayBuffer 是一种数据类型,用来表示一个通用的、固定长度的二进制数据缓冲区;(不能直接操作ArrayBuffer内容)
    • DataView是创建的一个类型化数组的视图或一个用来描述缓冲数据格式,可以使用它们读写缓冲区中的内容;

      [总]:一块大的连续的内存区域,可以用它来做一些高效的存取操作等。
    var buffer = new ArrayBuffer(4);
    var arr = new Int32Array(buffer);
    for(var i=0; i<LIMIT; i++) arr[i]=i;

参考链接:

最新文章

  1. Prototypes in Javascript 收集.__proto__
  2. Windows Phone 二十、陀螺仪
  3. 使用日期控件datePicker,阻止移动端的自动调取键盘的事件
  4. Resharp注册码
  5. FL2440驱动添加(3)LCD驱动添加学习笔记
  6. APP前端公共测试点
  7. Java跟C.C++相互调用
  8. 单节点伪分布集群(weekend110)的Hive子项目启动顺序
  9. myeclipse 写java代码提示 dead code 原因
  10. ubuntu用户及用户组文件信息
  11. 初探 iOS8 中的 Size Class
  12. inux xsel 拷贝复制命令行输出放在系统剪贴板上
  13. android layout属性介绍
  14. 第七届河南省赛A.物资调度(dfs)
  15. android开发之res下的menu (xml+代码的形式)
  16. MongoDB $关键字 关系比较符号 $lt $lte $gt $gte $ne
  17. The Google File System 中文版
  18. IT和非IT人士:2分钟了解什么是区块链
  19. Java - XPath解析爬取内容
  20. binlog2sql 用法

热门文章

  1. vue3介绍-vue3创建项目-setup函数-ref和reactive-计算属性和监听-生命周期-toRefs-script setup的作用和lang=ts-vue后台管理模板
  2. java中indexOf()获取指定次数的下标
  3. 使用 docker-compose 安装 es、kibana、mysql、redis、kafka
  4. 关于SQLsever2012报错的一些经验总结
  5. LVM分区扩容
  6. uniapp 配置钉钉小程序package.json文件
  7. 关闭内核Debug_log打印!
  8. Windows11 微软提供三种路径 安装程序应用
  9. [原创] CSS自定义IOS苹果,Android安卓的CheckBox 效果,可以根据文字大小变化而变化,内框显示文字,另外可自定大小,自定颜色
  10. tiktok运营工具