// Set 类似于数组,但是成员的值都是唯一的,没有重复的值
// 一、Set实例方法
// ①、Set.size 返回 Set实例的成员总数
let s = new Set()
// ②、Set.add 添加实例成员 (返回的是Set实例本身,所以支持链式添加)
s.add(1)
console.log(s.add(1)) // Set(1){1}
s.add(2).add(3)
// // ③、Set.delete 删除实例成员 返回的是布尔值,确认是否删除
s.delete(2)
// console.log(s.delete(1)) // true
// ④、Set.has 返回一个布尔值,判断传入的值是否在Set实例的成员中
console.log(s.has(1)) // true
// ⑤、Set.clear 删除Set实例所有的成员,没有返回值
s.clear()
console.log(s.size)
// 二、Set实例成员的遍历方法 (Set结构没有键名,所以 keys和values方法返回的结果一致)
let s1 = new Set([6,7,8])
// ①、Set.keys 返回键名
for(let val of s1.keys()) {
console.log(val) // 6 7 8
}
// ②、Set.values 返回键值
for(let val of s1.values()) {
console.log(val) // 6 7 8
}
// ③、Set.entries 返回键值对
for(let val of s1.entries()){
console.log(val) // [6,6] [7,7] [8,8]
}
// ④、forEach
s1.forEach( (item,index)=>{
console.log(index,item) // 6,6 7,7 8,8
})
// 三、Set实现数组去重
let arr = [1,2,3,4,1,1,2,3,5]
console.log([...new Set(arr)]) // [1,2,3,4,5]
// WeakSet
// 结构和Set类似,也是不重复的值的集合,但是WeakSet的成员只能是对象,而不能是其他类型的值
// WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用
// 传进去的参数的所有成员也是WeakSet的成员,所以也必须是对象
let ws = new WeakSet([['a'],['b']])
console.log(ws)
console.log(ws.size) // undefined WeakSet没有size属性
// console.log(new WeakSet(['a','b'])) // 里面的 'a' 'b' 不是对象
// 一、WeakSet的实例方法
// ①、WeakSet.add() 向WeakSet实例添加一个新成员,返回WeakSet实例本身
let o = [{a:1}]
ws.add([{a:1}])
console.log(ws.add(o))
// ②、WeakSet.delete() 清楚WeakSet实例的指定成员,返回的是一个布尔值
ws.delete(o)
console.log(ws.delete([{a:1}])) // false
// ③、WeakSet.has() 返回一个布尔值,表示某个值是否在WeakSet实例之中
console.log(ws.has(o)) // false
// ④、WeakSet没有size
console