// Set WeakSet Map WeakMap
const s = new Set()
const a = [1,2,3,4,5,6,7,8,undefined,undefined]
a.forEach((v, i, arr) => {
s.add(v)
})
console.log(s.size)
// for (let i of s) {
// console.log(i)
// }
// 实例对象的方法
// add 添加某个值,返回Set结构本身,可以链式调用
// delete 删除某个值 成功为true 否则为false
// has 返回一个布尔值,是否为Set成员
// clear 清除所有成员,无返回
// size 长度
// 遍历方法
// keys() 返回键名的遍历器
// values() 返回键值的遍历器
// entries() 返回键值对的遍历器
// forEach() 使用灰调函数遍历每个成员
console.log(s.values())
console.log(s.entries())
console.log(Array.from(s.entries()))
// WeakSet
// 成员只能是数据或者类数组的对象,由于不可迭代所以不能用于for of
// WeakSet无size属性
const ws = new WeakSet([[1]])
// ws.add(1) // VM5667:10 Uncaught TypeError: Invalid value used in weak set
console.log(ws)
// Map 和 WeakMap
// Map 是可以-value的键值对,key可为任何类型
// Map和Object的区别,Object有原型
// Map的属性
// clear: ƒ clear()
// constructor: ƒ Map()
// delete: ƒ delete()
// entries: ƒ entries()
// forEach: ƒ forEach()
// get: ƒ ()
// has: ƒ has()
// keys: ƒ keys()
// set: ƒ ()
// size: (...)
// values: ƒ values()
const map = new Map()
map.set('foo', true)
map.set('bar', false)
console.log(map, map.entries())
console.log(map.size)
console.log(map.get('foo'))
console.log(map.has('foo1'))
console.log(map.delete('foo1')) // 删除成功返回true 否则false
// 遍历方法
const map1 = new Map([
['a', 1],
['b', 2]
])
console.log(map1)
for (let key of map1.keys()) {
console.log(key)
}
// "a"
// "b"
for (let val of map1.values()) {
console.log(val)
}
// 1
// 2
for (let item of map1.entries()) {
console.log(item)
}
// ["a", 1]
// ["b", 2]
for (let [key, value] of map1.entries()) {
console.log(key +' '+ value)
}
// "a" 1
// "b" 2
// for...of...遍历map等同于使用map.entries()
// 数据类型转化
// Map 转为数组
const arr = [...map]
console.log(arr)
// [["foo", true], ["bar", false]]
// 数组转为Map
console.log(new Map(arr))
// Map转对象
let obj = {}
for (let [key, value] of map) {
obj[key] = value
}
console.log(obj)
// {foo: true, bar: false}
// 对象转Map
for (let key of Object.keys(obj)) {
map.set(key, obj[key])
}
console.log(map)
// 可在 vue 中使用 v-for=“[key, value] in map”
// WeakMap
// 只能接收对象的为键名 除 null
// 不能遍历 方法有 get set has delete
// Set
// 是一种叫做集合的数据结构(ES6新增的)
// 成员唯一、无序且不重复
// [value, value],键值与键名是一致的(或者说只有键值,没有键名)
// 允许储存任何类型的唯一值,无论是原始值或者是对象引用
// 可以遍历,方法有:add、delete、has、clear
// WeakSet
// 成员都是对象
// 成员都是弱引用,可以被垃圾回收机制回收,可以用来保存 DOM 节点,不容易造成内存泄漏
// 不能遍历,方法有 add、delete、has
// Map
// 是一种类似于字典的数据结构,本质上是键值对的集合
// 可以遍历,可以跟各种数据格式转换
// 操作方法有:set、get、has、delete、clear
// WeakMap
// 只接受对象作为键名(null 除外),不接受其他类型的值作为键名
// 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的
// 不能遍历,方法有 get、set、has、delete
console