关于js中的两种数组类型 看不见的数组优化

1. js中的Array和Object有什么区别

  这个问题要是没有对c++中的数组在内存中排列方式以及查找方式有一定了解  一定会模模糊糊的。首先你要明白什么叫数组 什么叫Object

       数组和Object的区别

          在C++中 数组是指在内存中按照一定次序指定开辟的一段拥有固定大小的一个个小格子 先确定空间 在朝里面装东西
          Object装的是引索,是一个个栈内存中的变量对标着一个堆内存中的一块内存空间(这个空间是随着对象大小变化的)

       (ps : 先别急着理解为什么我这里要提到c++, 后面会说的)

 

     数组和Object的find(查询)方式

      数组:根据上面的描述我们可以知道,数组是按照固定大小排序的一段连续内存空间,换句话说  假设总数组内存是 100 确定总房间(length)有10个  那么 每一个房间就是固定的10个单位大小,换句话说  第一个房间就是 0-10  11-20  21-30 一次排列 查询的时候直接按照这个规则定位内存空间片段就好了

      Object: 根据上面的定义,可以知道,Object的查询时直接获取引索,从引索得知 这个对象在内存空间中的位置为 x-y  然后去内存中获取二进制片段,返回;

        

     数组和Object的迭代(遍历)方式

      数组:首先数组本身就自带一个x-y的总体空间大小,获取每个格子的固定算法为   (y-x)/length*index

         Object: 因为引索和对象分别在栈 堆内存中,查询过程中要不断的互相访问切换 获取保存查询返回

 

2. Js中的两种数组类型

  Js中的数组为什么可以随意的push任意类型 无论是字符串还是Object 都可以放一起,这样不是违背了C++固定空间排序的规则了吗?   

      两种类型的数组

         平时大家创建数组都是

       var a = [];

       如果连续添加同样类型的数据,那么,这个对象的模式就是传统的C++ Array对象模式  
      a.push(number);
      但是 一旦出现不一样的类型 或者传入的不能确定的类型
      a.push(Object) 
      原来的Array会变成哈希数组(HashTable) 就是满数组

 

     数组的优化

        根据上面说的总结下来,可以了解到,更高效的数组查询一定是同类型的Array数组,当大量的Object数组需要查询的时候,应该有意识的存储一个key(String)数组保存出来, 用来查询;

       

posted @ 2022-03-28 11:09  blurs  阅读(97)  评论(0编辑  收藏  举报