在 JavaScript 中,Set、Map、WeakSet 和 WeakMap 是四种常见的数据结构,它们各自有着不同的特点和用途。本文将深入介绍这四种数据结构,帮助读者更好地理解它们的功能和适用场景。
-
唯一性:Set 中的值是唯一的,不会出现重复。 -
无序性:Set 中的值是无序排列的,不会按照插入的顺序进行排序。 -
可迭代性:Set 可以被迭代,可以使用 for…of 循环或者 forEach 方法来遍历。
const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(3);
mySet.add(1); // 重复添加不会生效
console.log(mySet); // 输出:Set { 1, 2, 3 }
-
键值对:Map 中的每个元素都是一个键值对。 -
可迭代性:Map 可以被迭代,可以使用 for…of 循环或者 forEach 方法来遍历键值对。 -
任意类型的键:Map 中的键可以是任意类型的值,包括对象、函数等。
const myMap = new Map();
myMap.set('name', 'Alice');
myMap.set('age', 30);
console.log(myMap.get('name')); // 输出:Alice
-
弱引用:WeakSet 中的对象是弱引用的,如果对象没有其他引用,则会被垃圾回收。 -
不可迭代:WeakSet 不支持迭代操作,因此无法遍历其中的元素。
let obj1 = { name: 'Alice' };
let obj2 = { name: 'Bob' };
const myWeakSet = new WeakSet();
myWeakSet.add(obj1);
myWeakSet.add(obj2);
console.log(myWeakSet.has(obj1)); // 输出:true
obj1 = null; // 将 obj1 置为 null
console.log(myWeakSet.has(obj1)); // 输出:false,obj1 已经被垃圾回收
-
弱引用:WeakMap 中的键是弱引用的,如果键没有其他引用,则会被垃圾回收。 -
不可迭代:WeakMap 不支持迭代操作,因此无法遍历其中的键值对。
let key1 = { name: 'Alice' };
let key2 = { name: 'Bob' };
const myWeakMap = new WeakMap();
myWeakMap.set(key1, 1);
myWeakMap.set(key2, 2);
console.log(myWeakMap.get(key1)); // 输出:1
key1 = null; // 将 key1 置为 null
console.log(myWeakMap.get(key1)); // 输出:undefined,key1 已经被垃圾回收
原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/89716.html