ES6新增Map、WeakMap和Set、WeakSet

Set(集合)

集合内部,键名与键值是一致的,且永远不会重复
集合内部,元素可以是任意值,对象,数组,null,undefined,false,0 等等

let setEx = new Set(); //Set(0) {}

let setEx2 = new Set ([1,3,5,7,'1']); // Set(5) {1, 3, 5, 7, "1"}

// Set 具有以下方法:has add clear delete keys values ...

可以利用内部元素永远不会重复这一特性,使用数组去重

var set = new Set([1,2,3,4,3,2,1]);  // [1,2,3,4]

set遍历可以这么遍历

for(let key of set.keys()) {
  console.log(key);
}
// "aa"
// "bb"
// "cc"

WeakSet(弱集合)

集合内部,键名与键值一致,只能都是对象,可以重复
集合内部,元素只能是对象,null也不可以

var weakset = new WeakSet([{name:1},{name:1},{name:2}]); 
// {{name:1},{name:1},{name:2}}

元素都是弱引用,可以被垃圾回收机制回收,可以用来保存DOM节点,不容易造成内存泄漏

WeakSet没有size,没办法遍历



Map(字典)

键名可以是任意类型的值(键名不可重复,重复会被后一个覆盖)。Object结构提供了 “字符串-值” 的对应,Map结构提供了 “值-值” 的对应。

let age = new Map([['emily',20],['snow',30],['jonse',18]]);
// {'emily' => 20, 'snow' => 30, 'jonse' => 18}

// Map方法 clear entries delete forEach ...
age.get('snow'); //30
age.has('snow'); //true
age.set('bob',37); //{"emily" => 20, "snow" => 30, "jonse" => 18, "bob" => 37}
age.delete('snow'); //true
age.has('snow'); //false

遍历字典,forEach就可以遍历

age.forEach(v=>{console.log(v)})

WeakMap(弱字典)

键名必须是对象,null也不行

let age2 = new WeakMap([[{name:1},20],[{name:1},30],[{name:2},18]]);
// {{name:1} => 20,{name:1} => 30,{name:2} => 18}

元素都是弱引用,可以被垃圾回收机制回收,可以用来保存DOM节点,不容易造成内存泄漏

不能遍历

weakMap的key可以用来保存dom节点,因为这个key(对象)的引用是弱引用,弱应用可以在任意时刻被回收~

什么时候会进行垃圾回收?
GC是周期性的进行的,定期查询无引用或者弱引用的对象,进行清除.....(新老生代/主副垃圾回收器那一堆...)
  var metadata = new WeakMap();
  var node1 = document.querySelector("#node1");
  var node2 = document.querySelector("#node2");
  metadata.set(node1, {
    id: 'node1'
  })
  metadata.set(node2, {
    id: 'node2'
  })
  console.log(metadata)




iterable

遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。

具有iterable类型的集合可以通过新的for … of循环来遍历,其是ES6引入的新的语法。

for …in的区别:

for…in在遍历过程中如果对原数组进行改变(比如push了一个元素),他还会按照以前的长度遍历;但是for…in就会多遍历一次

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值