一、数组和对象的优缺点
1、数组
特点:数组是一个有序的列表,可以根据指定下标找到元素以及其上下关系的元素,是一种紧密结构,长度会随着添加和删除而改变。
作用主要存储相关类似的数据,便于遍历全部处理
缺点:插入、删除非常消耗性能,排序也非常消耗性能。元素没有宿主,本身是无关联的,数组的元素可以重复,查找速度很慢。
2、对象
特点:对象是一个无序的列表,以键值对形式存储,可以通过键找到值,查找速度非常快。
对象用来存储关联性数据,因为是无序的,所以插入和删除速度非常快。
缺点:key只能是字符串或者Symbol型,无法使用对象或者其他内容作为键;对象是没有长度的,无法确定对象是否遍历到最后一个,只能通过键名找到值,无法直接使用值找到键名,需要遍历查找才行。
二、 Set
1、Set是一个不能有重复元素的集合,是一个无序集合,没有下标。
为了使添加删除查找速度非常快,将数据以无序的方式存储,自带值去重。
有一个维护性的元素数量属性size
2、创建Set
var s=new Set();
var s=new Set(“abc”);
var s=new Set([1,2,3,4,5]);
var s=new Set([{a:1,b:2},{c:3,d:4}]);
3、Set中元素的增删改查
添加元素
s.add(1);
s.add(2);
删除元素
s.delete(2);
判断有没有某个元素
s.has(2)
清空所有元素
s.clear()
查看元素的数量
s.size
4、Set中的forEach方法遍历Set
var s=new Set([1,2,3,4,5]);
s.forEach(value=>{
console.log(value);
})
5、entries()
s.entries() 方法可以拿到Set的迭代器
迭代器有一个next方法,可以通过s.entries().next().value得到元素,s.entries().next().done为true时,表示迭代器运行完了。
console.log(s.entries().next());
三、WeakSet
WeakSet 弱引用Set
存在WeakSet中引用对象被设为null,垃圾回收车会自动从WeakSet中清除。
WeakSet不能遍历。
四、Map
1、Map 类型 针对Object做了优化,模仿HashMap
key可以是任何类型,有长度size属性
2、创建Map
var map=new Map();
3、Map中元素的增删改查
添加元素
map.set(“name”,“chen”)
var arr=[1,2,3];
map.set(arr,10);
删除元素,按照键名删除
map.delete(arr);
清空所有元素
map.clear()
通过key获取值
map.get(key)
判断map中是否有该成员
map.has(value)
获取map的成员数
map.size
4、遍历Map
遍历Map的key
map.keys() 获取键的迭代器
for(var key of map.keys()){
console.log(key);
}
遍历Map的value
map.values() 获取值的迭代器
for(var value of map.values()){
console.log(value)
}
遍历Map的key和value
map.entries() 获取map的迭代器
for(var [key,value] of map){
console.log(key,value);
}
for(var [key,value] of map.entries()){
console.log(key,value);
}
forEach方法完成遍历
map.forEach((value,key)=>{
console.log(key,value);
})
五、WeakMap
弱引用Map,也不能遍历
var map=new WeakMap();
map.set(“name”,“xietian”);
var o={a:1};
var arr=[1];
map.set(o,arr);
o=null;
console.log(map);
六、迭代器 iterator
数组、Set、Map都具有迭代器,所有迭代器的序列都可以用for of遍历。
var s=new Set([1,2,3,4,5]);
for(var value of s){
console.log(value);
}