美文网首页
Symbol & Set & Map

Symbol & Set & Map

作者: 钱罗罗_ | 来源:发表于2019-07-12 16:18 被阅读0次

一、Symbol

    1. 唯一性

        避免对象上重复属性名的冲突覆盖。阮一峰老师说它是独一无二的值,在什么范围独一无二的呢?全局,即使是参数一样的symbol,也是不相等的,也就不会出现key值相同而导致原值被覆盖 ,所以可以避免留下很多参数相同的symbol作为key值的value

    2. 数据类型

        symbol是js的基本数据类型,不需要使用new关键字创建,但是每次都要这么写

新建symbol

    3. 作为属性值

            在对象的内部,使用 Symbol 值定义属性时,Symbol 值必须放在方括号之中.,不然就是那个总复习换作为属性名了

属性名要加方括号

    4.取值

    由于对象里有两个,参数相同Symbol的值,那我们怎么将不同的值取出呢?或者说,我们用一个symbol的key,取出的是哪个值呢???

            我们是不能通过点运算符取出值的,当symbol作为对象属性名的时候,

    5.遍历

         Symbol 作为属性名,一般的遍历是访问不到的,(for...in、for...of)循环不行。

        Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()也不好使

        Object.getOwnPropertySymbols会方法返回一个数组,成员是当前对象的所有用作属性名的 Symbol 

getOwnPropertySymbols

    另外一个新的API也行,Reflect.ownKeys(obj),后面再看这个对象。现在稍微有点印象就可以。

reflect

    6. 希望对原有的symbol进行操作(Symbol.for)

            它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建并返回一个以该字符串为名称的 Symbol 值。

symbol.for

    
            调用Symbol.for("cat")30 次,每次都会返回同一个 Symbol 值,但是调用Symbol("cat")30 次,会返回 30 个不同的 Symbol 值。

    7.获取一个已登记的 Symbol 类型值的key

symbol.keyFor

二、Set

    1. 是一个新的数据结构

            它类似于数组,但是成员的值都是唯一的,没有重复的值

新建set数据结构 数组去重


    2. 数据怎么改动

       在 Set 内部,两个NaN是相等

        Set.prototype.add(value):添加某个值,返回 Set 结构本身。

        Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。

        Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。

        Set.prototype.clear():清除所有成员,没有返回值。

     3.遍历

            Set.prototype.keys():返回键名的遍历器

            Set.prototype.values():返回键值的遍历器

            Set.prototype.entries():返回键值对的遍历器

           Set.prototype.forEach():使用回调函数遍历每个成员

            扩展运算符(...)内部使用for...of循环,所以也可以用于 Set 结构,数组的map和filter方法也可以间接用于 Set 了。

三、 WeakSet

    1. WeakSet 结构与 Set 类似,也是不重复的值的集合

    2. 区别

            WeakSet 的成员只能是对象,而不能是其他类型的值;

            WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中,WeakSet 里面的引用,都不计入垃圾回收机制;

   3. 方法          

            WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。

            WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。

            WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在 

            WeakSet 没有size属性,没有办法遍历它的成员,因为成员都是弱引用,随时可能消失,遍历机制无法保证成员的存在,很可能刚刚遍历结束,成员就取不到了

   4.用处

         储存 DOM 节点,而不用担心这些节点从文档移除时,会引发内存泄漏。

四、Map

    1. 为什么出现map形式的数据结构   

        因为传统的对象的属性值只能用字符串,  可就是有的人(小白 or 大佬)就是想用引用类型的数据做属性值呢?怎么办?虽然我不知到具体应用的场景,但就是可能和粗线这孩子那感情靠,所以ECMA就创造了Map数据结构,Map类似对象,就是属性值可以使任意形式的数据,是更完善的Hash结构实现

    2. 方法和属性

            size: 返回 Map 结构的成员总数;

            get(key): 读取key对应的键值,如果找不到key,返回undefined;

            set(key, value): 设置键名key对应的键值为value,然后返回整个 Map 结构

            has(key): 返回一个布尔值,表示某个键是否在当前 Map 对象之中

            delete(key): 删除某个键,返回true。如果删除失败,返回false

            clear(): 清除所有成员,没有返回值。

    3.遍历

            Map.prototype.keys():返回键名的遍历器。

            Map.prototype.values():返回键值的遍历器。

            Map.prototype.entries():返回所有成员的遍历器。

            Map.prototype.forEach():遍历 Map 的所有成员。

    4.转换

            Map 结构转为数组结构,比较快速的方法是使用扩展运算符(... )

            结合数组的map方法、filter方法,可以实现 Map 的遍历和过滤,Map 本身没有map和filter方法       

五、WeakMap

       1. WeakMap结构与Map结构类似,也是用于生成键值对的集合

       2. 区别

                   WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名;

                   WeakMap的键名所指向的对象,不计入垃圾回收机制。 

        3. 操作

                同Map,无size属性,无遍历操作。

        4.应用场景

                WeakMap 应用的典型场合就是 DOM 节点作为键名

相关文章

  • ES6

    Symbol Set和Map Set Map Proxy get() set() apply() Reflect ...

  • Symbol & Set & Map

    一、Symbol 1. 唯一性 避免对象上重复属性名的冲突覆盖。阮一峰老师说它是独一无二的值,在什么范围独一无...

  • 超详细 ES6 代码段

    let和const 解构赋值 正则 字符串 数值 数组 函数 对象 Symbol Set Map Map / Ar...

  • ES6新增的数据类型

    Symbol 类型(基本) Set 类型(复杂) Map 类型(复杂) WeakSet 类型(复杂) WeakMa...

  • es6

    1 let \cont 2 结构 3 Symbol 4 Map 与 Set 5 Reflect 与 Proxy 6...

  • umdh--查找内存泄漏--使用方法

    set _NT_SYMBOL_PATH=symbol目录多个目录,以’;’隔开 例:Set _NT_SYMBOL_...

  • Set集合,Map集合,Symbol,Promises

    2017-08-22-day08 Set 集合: 什么是: 值不允许重复的集合。专门用于按元素值,直接判断集合中是...

  • 【ES6】Symbol/set,map

    9 Symbol #9.1 介绍 ES6引入Symbol作为一种新的原始数据类型,表示独一无二的值,主要是为了防止...

  • 数据结构set && map &&symbol

    Set es6新推出的一种数据结构,他类似于数组,但是他的成员值都是唯一的,没有重复。 let list = ne...

  • web前端ES6/7/8新特性

    ES6中新增了哪些数据类型?Symbol类型(基本)Set类型(复杂)Map类型(复杂)WeakSet类型(复杂)...

网友评论

      本文标题:Symbol & Set & Map

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