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
的键只能是对象,并且对对象的引用是弱引用。