set
Set是es6新增的数据结构,类似于数组,但与数组的区别就是它的元素不重复
Set是一个构造函数,用来生成Set数据结构
const set = new Set()
console.log(set) // Set() {}
set.add(2) // Set(1) {2}
set.add(1) // Set(2) {2,1}
set.add(2) // Set(2) {2, 1}
可以使用add方法来添加成员,Set不会添加相同的元素,这就表明了Set的元素是不能重复的,我们可以利用这一特性来对数组去重
在Set函数中传个数组为作为参数,生成Set数据结构用来初始化
[...new Set([1,2,3,4,5,1,3,4])] //[1, 2, 3, 4, 5]
/**
@param Array 传递一个数组,用于生成Set对象实例
*/
const set = new Set(array) //Set 构造函数, 传数组初始化
set.add(1) //增加set元素 1, 返回新的Set对象
set.size //元素的长度, 返回
// 可用于数组的去重, 1.Set元素唯一, 转正常数组的方式,数组的解构赋值
set.delete() //删除元素, 返回。。。
set.has() // 查, 返回
set.clear() // 清除所有成员, 无返回
Array.from(set) //转换为数组
// 遍历操作
set.keys() //返回键遍历器
set.values() //返回值遍历器
set.entries() // 返回键值对遍历器
set.forEach() // 使用回调函数遍历每个成员
WeakSet
// 1.WeakSet 是弱引用的,成员随时都有可能被回收,所以不可遍历
// 2. 成员只能是对象,否则会报错
// 3. 与set类似
// 应用:可存放Dom元素,而不用担心造成内存泄漏
Map
// 就是一种对应关系, 作为对象的键只能是他的应用值,相同对象的引用不同,会得到不同的值,也可以设置
var k = {foo: 2}
var m = new Map([[{foo: 2}, 2]])
var m1 =new Map([[k, 2]])
m.get({foo:2}) // undefined
m.get(k) // 2
new Map([[1,2]])
Map(1) {1 => 2}
// 传统对象的键只能用字符串, 有的时候需要使用变量做为对象的键,有了Map就可以了
var el = document.getElementById("app")
m.set(el, 3) // Map(1) { #app => 3 }
//Map 接收参数的方式就是用数组元素为两个数组的二维数组,作为键和值
const m = new Map([[1,3], [2,3]])
// Map 增删改查 set(key, value) get(key) has(key) delete(key) clear()
// Map 遍历 和Set一样 keys() values() forEach((val) => {})
// Map 与数组、对象、JSON的互相转换
WeakMap
// 只能接收对象作为键名, 否则会报错
// 不计入垃圾回收机制和WeakSet类似