🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Set/WeakSet、Map/WeakMap >Set对象可以存储任何类型的数据。值是唯一的。Map对象保存键值对,任意值都可以成为它的键或值。 >不同:WeakSet 的成员只能是对象,WeakMap只接受对象作为键名(null除外)、不可遍历、垃圾回收 Object的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,包括函数、对象、基本类型。 对象中储存的对象值都是被弱引用的,则这个对象将会被垃圾回收掉,所以 WeakSet 对象里有多少个成员元素,取决于垃圾回收机制有没有运行,运行前后成员个数可能不一致,遍历结束之后,有的成员可能被垃圾回收了,WeakSet 对象是无法被遍历的。 ```js // Set 实例属性 --- constructor:构造函数; size: 元素数量 let s = new Set() console.log(s.length) // undefined console.log(s.size) // 3 // Set 实例方法 ---- add()、has()、delete()、clean() s.add(1).add(2).add(1) // Set{1, 2} s.has(1) // true s.delete(1) s.clean() // Set{} // Array.from 或者 扩展运算符 转化为数组 let arr = Array.from(s) console.log(arr) // [1, 2, 3] console.log([...s]) // [1, 2, 3] // 遍历方法 console.log(set.keys()) // SetIterator {1, 2, 3} console.log(set.values()) // SetIterator {1, 2, 3} console.log(set.entries()) // SerIterator {1, 2, 3} set.forEach((value, key) => { console.log(`${key}:${val}`) // 1:1 2:2 3:3 }) // Set很容易实现交集(intersect)、并集(union)、差集(difference) let intersect = new Set([...set1].filter(value => set2.has(value))) let union = new Set([...set1, ...set2]) let difference = new Set([...set1].filter(value => !set2.has(value))) ```