美文网首页
ES6--(7) Set与Map

ES6--(7) Set与Map

作者: wangxia34 | 来源:发表于2018-04-11 18:01 被阅读0次

    ES5 中的 Set 与 Map

        Set 与 Map 并不正式存在于 ES5 中。一般会使用对象来模拟 Set 和 Map 。

    set map

    变通方法的问题

        由于对象属性的类型必须为字符串,就必须保证任意两个键不能被转换为相同的字符串。比如数字和数字组成的字符串、两个对象等。

    ES6 的 Set

        ES6 新增了 Set 类型,这是一种无重复值的有序列表。 Set 允许对它包含的数据进行快速访问,从而增加了一个追踪离散值的更有效方式。

    创建 Set 并添加项目

        Object.is()方法来判断两个值是否相等的,所以不会强制转换。(对象与之相同)

        可以使用 has() 方法来测试某个值是否存在于 Set 中。

    移除值

        可以使用 delete() 方法来移除单个值,或调用 clear() 方法来将所有值从 Set 中移除。

    Set 上的 forEach() 方法

        forEach() 方法会被传递一个回调函数,该回调接受三个参数:

            1. Set 中下个位置的值;

            2. 与第一个参数相同的值;

            3. 目标 Set 自身。

    key与value相等

    如果想在回调函数中使用this,可以在forEach()中传入第二个参数this。或者使用箭头函数。

    将 Set 转换为数组

        Set 无法通过索引来访问某个值。不过可以将其转化成数组,利用扩展运算符...

    数组去重

    Weak Set

        对象存储在 Set 的一个实例中时,实际上相当于把对象存储在变量中。只要对于 Set 实例的引用仍然存在,所存储的对象就无法被垃圾回收机制回收,从而无法释放内存。

        ES6 也包含了 Weak Set ,该类型只允许存储对象弱引用,而不能存储基本类型的值。对象的弱引用在它自己成为该对象的唯一引用时,不会阻止垃圾回收。

    创建 Weak Set

    Set 类型之间的关键差异

        Weak Set 与正规 Set 之间最大的区别是对象的弱引用。若只想追踪对象的引用,应当使用 Weak Set 而不是正规 Set 。

            1. 对于 WeakSet 的实例,若调用 add() 方法时传入了非对象的参数,就会抛出错误(has() 或 delete() 则会在传入了非对象的参数时返回 false );

            2. Weak Set 不可迭代,因此不能被用在 for-of 循环中;

            3. Weak Set 无法暴露出任何迭代器(例如 keys() 与 values() 方法),因此没有任何编程手段可用于判断 Weak Set 的内容;

            4. Weak Set 没有 forEach() 方法;

            5. Weak Set 没有 size 属性。

    ES6 的 Map

        ES6 的 Map 类型是键值对的有序列表,而键和值都可以是任意类型。键的比较使用的是Object.is()。

        set() 方法并给它传递一个键与一个关联的值,来给 Map 添加项; get() 方法便能提取对应的值。

    Map 的方法

            has(key) :判断指定的键是否存在于 Map 中;

            delete(key) :移除 Map 中的键以及对应的值;

            clear() :移除 Map 中所有的键与对应的值。

            size 属性,用于指明包含了多少个键值对

    Map 的初始化

    Map 上的 forEach 方法

        三个参数的回调函数:

            1. Map 中下个位置的值;

            2. 该值所对应的键;

            3. 目标 Map 自身。

    Weak Map

        在 Weak Map 中,所有的键都必须是对象(尝试使用非对象的键会抛出错误),而且这些对象都是弱引用,不会干扰垃圾回收。当 Weak Map 中的键在 Weak Map 之外不存在引用时,该键值对会被移除。

    使用 Weak Map

    Weak Map 的初始化

    Weak Map 的方法

        Weak Map 只有两个附加方法能用来与键值对交互。has() 与 delete() 方法。

    对象的私有数据

        Weak Map 的一个实际应用就是在对象实例中存储私有数据。

    Weak Map 的用法与局限性

        是否使用非对象的键。

    相关文章

      网友评论

          本文标题:ES6--(7) Set与Map

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