SOURCE

// 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 命令行工具 X clear

                    
>
console