JavaScript基础(九)Map、WeakMap、Set、WeakSet、Object

24 阅读4分钟

大家好,我是蓝胖子的小叮当,今天分享的是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基础的下一章:对象方法总结