大家好,我是蓝胖子的小叮当,今天分享的是JavaScript的第九章Map、WeakMap、Set、WeakSet、Object,大家在阅读期间有任何的意见或建议都可以留言给我哈!
9.1Map
Map是一组键值对的结构,键和值可以使任何数据类型,具有极快的查找速度。
适用场景:本质是空间换时间,数据量足够大时,空间代价的影响小。
let m = new Map(); // 空Map
m.set('张伟', 67); // 添加新的key-value
let m1 = new Map([['张伟',67]]); // 或通过二维数组形式声明时赋值
m.has('张伟'); // 是否存在key '张伟': true
m.get('张伟'); // 67
m.delete('张伟'); // 删除key '张伟'
m.clear();//移除所有
m.forEach(item);//遍历
9.2WeakMap
WeakMap是一组键值对的集合,其中的键是弱引用对象,而值可以任意,只接受对象作为键名(null除外),不接受其他类型作为键名。
键名所指向的对象是可以被垃圾回收的,回收后键名是无效的。
weakmap对象是不可枚举的,无法获取大小。
使用Weakmap时我们不能使用keys()、values()、entries(),因为我们不知道何时垃圾回收器会移除这个对象;可使用方法有get()、set()、has()、delete()。
9.3Set
Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
集合是由一组无序且唯一(即不能重复)的项组成的(注意:数字和字符串是不同的元素)
let s = new Set([1, 2, 3, 3, '3']);
s.add(4);//向集合添加一个新的项
s.delete(3);//从集合中移除一个值
s.has(3);//如果值在集合中存在,返回true,否则false
s.clear();//清除集合内所有项
s.keys();//返回一个包含集合中所有键的数组
s.values();//返回一个包含集合中所有值的数组
s.forEach();//用于对集合成员执行某种操作,没有返回值
9.4WeakSet
WeakSet对象允许你将弱引用对象储存在一个集合中,成员唯一、都是对象
可以被垃圾回收,可以用来保存DOM节点,不容易造成内存泄漏
不能遍历,可用方法有add()、delete()、has()
9.5Object
js复杂类型之一,本质上是一个构造函数,用于创建对象。
1.对于 Object 而言,它键(key)的类型只能是字符串,数字或者 Symbol;而对于 Map 而言,它可以是任何类型。
2.Map 中的元素会保持其插入时的顺序;而 Object 则不会完全保持插入时的顺序
3.读取 Map 的长度很简单,只需要调用其 .size() 方法即可;而读取 Object 的长度则需要额外的计算: Object.keys(obj).length
4.Map 是可迭代对象,所以其中的键值对是可以通过 for of 循环或 .forEach() 方法来迭代的;而普通的对象键值对则默认是不可迭代的,只能通过 for in 循环来访问(或者使用 Object.keys(o)、Object.values(o)、Object.entries(o) 来取得表示键或值的数字)迭代时的顺序就是上面提到的顺序
5.JSON 默认支持 Object 而不支持 Map。若想要通过 JSON 传输 Map 则需要使用到 .toJSON() 方法,然后在 JSON.parse() 中传入复原函数来将其复原
//可以通过点.或者括号[]运算符来访问对象的属性
let name = person.name;
let age = person['age'];
person.gender = 'male'; // 添加属性
person.name = 'Jane'; // 修改属性
delete person.age; // 删除属性
// 使用for...in循环来遍历对象的所有可枚举属性
for (let key in person) {
if (person.hasOwnProperty(key)) { // 检查属性是否是对象自身的属性
console.log(key, person[key]);
}
}
9.5总结
Set和Map主要的应用场景在于数组去重和数据存储,
Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构
字典:
1.Map的键可以是任何类型,包括对象、数组、函数等,是一些元素的集合;
2.保持键值对的插入顺序,是有序的;
3.每个元素有一个称作key 的域,不同元素的key 各不相同
集合:
1.是由一堆无序的、相关联的,且不重复的内存结构【数学中称为元素】组成的组合
2.集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储
对象:
1.Object的键只能是字符串或Symbol,其他类型会被转换为字符串
2.对象是无序的,在数字key的情况下会优先迭代数字key
好啦,关于Map、WeakMap、Set、WeakSet、Object的知识点就总结到这里,如果有什么疑问、意见或建议,都可畅所欲言,谢谢大家,我也将持续更新。
预告:对象的操作方法太多,记不清?欢迎收看JavaScript基础的下一章:对象方法总结