美文网首页
ES6 笔记 集合

ES6 笔记 集合

作者: yangweigbh | 来源:发表于2017-01-23 10:22 被阅读10次

    ES6 中加入了Set, Map, WeakSet, WeakMap

    为什么加入集合

    Javascript中的Object,类似于map,可以向其中添加key-value对(属性),可以getsetdeleteiterate属性,但是Object相较于Map有以下缺点:

    • 作为Map的Object的方法名有可能和属性名冲突

    • 创建作为Map的Object时需要使用Object.create(null)避免继承Object中的方法

    • 属性的key必须是字符串

    • 无法得到有多少属性

    • 无法和for...of使用

    ES6中的集合不会将数据暴露成属性,而是必须使用get(key)方法获取

    Set

    • new Set() 创建空的Set
    • new Set(iterable)用iterable的value创建Set
    • set.size set的大小
    • set.has(value) value是否在set中
    • set.add(value) 向set中添加一个value,如果value已经存在,则不作操作
    • set.delete(value)从set删除value,adddelete都返回set本身
    • set[Symbol.iterator]()返回set的迭代器
    • set.forEach(f) 对每个value调用f,跟一下等价
    for (let value of set)
        f(value, value, set);
    
    • set.clear() 删除set中所有值
    • set.keysset.valuesset.entries()返回对用的迭代器

    Map

    • new Map创建空的Map
    • new Map(pairs) pair可以是Map,两元素Array的Array,或者产生两元素数组的generator
    • map.size Map中entry的数量
    • map.has(key) key是否在map存在
    • map.get(key) 得到key的value,如果key不存在,返回undefined
    • map.set(key, value) 添加key-value对
    • map.delete(key) 删除一个entry
    • map.clear() 删除所有entry
    • map[Symbol.iterator]() 返回entry的iterator
    • map.forEach(f) 同以下:
    for (let [key, value] of map)
      f(value, key, map);
    
    • map.keys()map.values()map.entries()返回对应的iterator

    JS集合的不同之处

    • object没hashcode
    var urls = new Set;
    urls.add(new URL(location.href));  // two URL objects.
    urls.add(new URL(location.href));  // are they the same?
    alert(urls.size);  // 2
    
    • 遍历Map和Set时,是按value插入的顺序

    WeakMap和WeakSet

    weakMap的key和WeakSet的value都是弱引用的,不会影响GC

    • WeakMap支持 newhasgetsetdelete

    • WeakSet 支持newhasadddelete

    • WeakSet的value和WeakMap的key必须是object

    相关文章

      网友评论

          本文标题:ES6 笔记 集合

          本文链接:https://www.haomeiwen.com/subject/zacabttx.html