JS中Set、WeakSet、Map 和 WeakMap区别
2023-12-19 23:56:33
ES6引入的四种新的数据结构,它们各自有不同的特性和用途。
-
Set:
Set
是一种集合数据结构,成员的值都是唯一的,没有重复的值。- 它可以包含任何类型的原始值或对象引用。
Set
是可迭代的,可以使用for...of
循环遍历。- 提供了
add
、delete
、has
等方法来操作集合。
例:
let set = new Set(); set.add(1); set.add(2); set.add(3); for (let value of set) { console.log(value); // 1, 2, 3 }
-
WeakSet:
WeakSet
与Set
类似,但其成员都是对象,并且对对象的引用是弱引用。- 如果一个对象没有被其他引用所指向,那么它可能会被垃圾回收机制回收,
WeakSet
不会阻止这个过程。 WeakSet
是不可迭代的,但提供了add
、delete
、has
等方法。
例:
let weakSet = new WeakSet(); let obj = {}; weakSet.add(obj); console.log(weakSet.has(obj)); // true
-
Map:
Map
是一种映射数据结构,类似于对象,但是键可以是任意类型的值(包括对象)。- 它是可迭代的,可以使用
for...of
循环遍历。 - 提供了
set
、get
、has
、delete
等方法来操作映射。 Map
中的键值对是有序的,按照添加的顺序排列。
例:
let map = new Map(); map.set('name', 'John'); map.set('age', 30); for (let [key, value] of map) { console.log(key + ': ' + value); // name: John, age: 30 }
-
WeakMap:
WeakMap
与Map
类似,但其键只能是对象(null
除外),并且对对象的引用是弱引用。- 如果一个对象没有被其他引用所指向,那么它可能会被垃圾回收机制回收,
WeakMap
不会阻止这个过程。 WeakMap
是不可迭代的,但提供了set
、has
、delete
等方法。
例:
let weakMap = new WeakMap(); let obj = {}; weakMap.set(obj, 'value'); console.log(weakMap.has(obj)); // true
总结:
Set
和WeakSet
主要用于存储唯一值,区别在于Set
可以存储任何类型的值,而WeakSet
只能存储对象,并且对对象的引用是弱引用。Map
和WeakMap
主要用于存储键值对,区别在于Map
的键可以是任意类型的值,而WeakMap
的键只能是对象,并且对对象的引用是弱引用。
文章来源:https://blog.csdn.net/m0_37577465/article/details/133337967
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!