LearningRecord icon indicating copy to clipboard operation
LearningRecord copied to clipboard

Set、Map、WeakSet 和 WeakMap

Open Rashomon511 opened this issue 5 years ago • 0 comments

  • Set 成员唯一、无序且不重复 [value, value],键值与键名是一致的(或者说只有键值,没有键名) 可以遍历,方法有:add、delete、has

  • WeakSet 成员都是对象 成员都是弱引用,可以被垃圾回收机制回收,可以用来保存DOM节点,不容易造成内存泄漏 不能遍历,方法有add、delete、has

  • Map 本质上是键值对的集合,类似集合 可以遍历,方法很多可以跟各种数据格式转换

  • WeakMap 只接受对象最为键名(null除外),不接受其他类型的值作为键名 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的 不能遍历,方法有get、set、has、delete

    • 扩展:Object与Set、Map

    1.Object 与 Set

 const properties1 = {
   'width': 1,
   'height': 1
}
console.log(properties1['width']? true: false)
// Set
const properties2 = new Set()
properties2.add('width')
properties2.add('height')
console.log(properties2.has('width'))

2.Object 与 Map JS 中的对象(Object),本质上是键值对的集合(hash 结构)

const data = {};
const element = document.getElementsByClassName('App');

data[element] = 'metadata';
console.log(data['[object HTMLCollection]']) // "metadata"

但当以一个DOM节点作为对象 data 的键,对象会被自动转化为字符串[Object HTMLCollection],所以说,Object 结构提供了 字符串-值 对应,Map则提供了 值-值 的对应

  • 反思 我书看的不够认真

Rashomon511 avatar Mar 30 '19 12:03 Rashomon511