键值类型Map,Object

2022-06-22  本文已影响0人  skoll

Object

1 .现在使用的对象,只能提供键值对的集合,只能用字符串当作键
2 .如果想拿一个document.querySelector('#div')的dom节点作为键,会被自动转为[object HTMLDivElement]: "meta"
3 .而且遍历出来是不保序的
4 .其他功能:键值获取,删除,检测某个键是否存在
5 .需要对个别元素进行操作的时候用Object
6 .js中几乎所有的对象都是Object实例

Map

1 .键的范围不止是字符串,各种类型的值,字符串,对象,Node节点都可以
2 .map的优势

1 .Object的键值只能是字符串,Map可以是任意类型,上面的存起来就是这个 {div#div => 'meta'} 提供的是值对值的存储
2 .不需要手动计算大小,有属性返回
3 .Map的遍历遵循元素的插入顺序
4 .Object有原型,所有映射会有一些确省的值,需要这样Object.create(null)回避

3 .Map的键是和内存地址绑定的,只要是内存地址不一样,就视为两个键,可以避免同名属性碰撞的问题
4 .简单类型作为键的情况

1 .0,-0是一个键
2 .布尔值true,字符串true是两个不同的值
3 .undefined,null也是两个不一样的
4 .NaN是一个键,虽然NaN自己和自己不相等

5 .Map是为了快速搜索和查找数据而存在的
6 .Map是可迭代对象,键值对可以通过for ..of循环迭代

创建

1 .Object速度更快,

访问元素

1 .差距不大

插入元素

1 .需要新增很多元素的时候,Object会比Map多占用78%的内存

删除元素

1 .时间复杂度一样,但是map有clear方法,object需要循环删除
2 .差距不大

获取大小

元素迭代

类型转换

1 .json转为map
2 .

使用map 大佬一般不需要出山

1 .键值不是数字,字符串,symbol
2 .存储大量的数据,内存更少
3 .需要新增/删除许多元素的时候,速度更快
4 .需要保持插入顺序的时候

使用Object

1 .简单的数据结构,数据少的时候内存更少,速度快
2 .需要覆盖原型上的键的时候,用这个
3 .需要对多个键值进行运算的时候,他比较简单
4 .如果要内部维护自己的逻辑和属性,只能用object

{
name:"test",
print:function(){
  console.log(`${this.name}`)  
}
}

5 .知道所有的key,都为字符串或整数.需要一个简单的结构去存储这些数据,Obejct是一个非常好的选择.构建一个Object并通过知道的key获取元素的性能要优于Map(字面量vs构造函数 直接获取vsget()方法)
6 .[]访问动态拼接属性好像object更方便一点.

上一篇下一篇

猜你喜欢

热点阅读