返回
借助Map/WeakMap、Set/WeakSet,在ES6中闪电般理解键值存储
前端
2023-09-15 16:08:34
键/值的存储方式
在ES6之前,使用object对象是完成键/值存储的便捷且高效的方法。然而,ES6标准新增了map和set这两个数据结构,为键/值存储提供了更加强大的选择。
Map
Map是一种键/值存储结构,与对象相似,但具有更强的功能。它可以接受任意类型的值作为键,包括对象和函数。此外,Map会记住键的插入顺序,这在某些情况下非常有用。
Map的优势:
- 可以接受任意类型的值作为键。
- 键的顺序会被记住。
- 提供了许多有用的方法,例如get()、set()、delete()、clear()等。
Map的示例:
const myMap = new Map();
myMap.set('name', 'John Doe');
myMap.set(1, 'One');
myMap.set(true, 'True');
console.log(myMap.get('name')); // 'John Doe'
console.log(myMap.get(1)); // 'One'
console.log(myMap.get(true)); // 'True'
WeakMap
WeakMap与Map类似,但它具有更弱的引用。这意味着WeakMap中的键不会阻止垃圾回收器回收它们所引用的对象。这对于存储临时数据或防止内存泄漏非常有用。
WeakMap的优势:
- 键不会阻止垃圾回收器回收它们所引用的对象。
- 提供了许多有用的方法,例如get()、set()、delete()、clear()等。
WeakMap的示例:
const myWeakMap = new WeakMap();
const obj = {};
myWeakMap.set(obj, 'Hello World!');
console.log(myWeakMap.get(obj)); // 'Hello World!'
Set
Set是一种不存储重复值的集合。与数组不同,Set中的元素是无序的。这使得Set非常适合用于存储唯一值或检查某个值是否存在于集合中。
Set的优势:
- 不存储重复值。
- 元素是无序的。
- 提供了许多有用的方法,例如add()、delete()、clear()、has()等。
Set的示例:
const mySet = new Set();
mySet.add('One');
mySet.add('Two');
mySet.add('Three');
console.log(mySet.has('One')); // true
console.log(mySet.has('Four')); // false
WeakSet
WeakSet与Set类似,但它具有更弱的引用。这意味着WeakSet中的值不会阻止垃圾回收器回收它们所引用的对象。这对于存储临时数据或防止内存泄漏非常有用。
WeakSet的优势:
- 值不会阻止垃圾回收器回收它们所引用的对象。
- 提供了许多有用的方法,例如add()、delete()、clear()、has()等。
WeakSet的示例:
const myWeakSet = new WeakSet();
const obj = {};
myWeakSet.add(obj);
console.log(myWeakSet.has(obj)); // true
总结
ES6中的Map和WeakMap、Set和WeakSet提供了比传统对象和数组更强大的键/值存储功能。Map和WeakMap可以存储任意类型的值作为键,Set和WeakSet可以存储唯一值。这些数据结构非常适合用于提高代码性能和防止内存泄漏。