Table of Contents:
  1. 申明
    1. Set数据结构
      1. WeakSet(特殊的Set容器)
        1. Map数据结构
          1. WeakMap(特殊的Set容器)
            1. Symbol数据类型

              ES6学习笔记3(set、map和Symbol)

              Reading Time:The full text has 894 words, estimated reading time: 5 minutes
              Creation Date:2017-07-02
              Article Tags:
               
              BEGIN

              申明

              阮一峰老师的ECMAScript 6学习笔记。

              看到map和set还是有点亲切的,之前为了竞赛写了一年的c++,自认对STL用的也还顺手,一年没碰了,现在打开reference 🔗页面还是挺感慨的,连最基本的vector都忘了[摊手]。虽然用法忘了,但标准模板库的设计理念还在,尤其set和map容器,es6都加进来了,来看看有什么区别。咳咳,废话多了。。。

              Set数据结构

              Set容器类似数组,但成员的值都是唯一的。

              1. Set容器的实例化及常用操作,add(value)添加元素,delete(value)删除元素,has(value)判断元素是否存在,clear()清空容器。
              //实例化Set容器变量
              var ss = new Set([1, 2, 2]); //Set { 1, 2 }
              //添加元素
              ss.add(3); //Set { 1, 2, 3 }
              //转换成数组
              var ssarr = Array.from(ss); //[ 1, 2, 3 ]
              //判断元素是否存在
              ss.has(2); //true
              ss.has(4); //false
              //删除元素,返回bool值表示是否删除成功
              ss.delete(2); //Set { 1, 3 }
              //查看成员数量
              ss.size; //2
              //清除Set容器内的所有元素
              ss.clear(); //Set {}
              //通过Set容器给数组去重
              let arr = [1, 2, 2, 3, 3];
              arr = [...new Set(arr)]; //[ 1, 2, 3 ]
              1. keys()values()entries()返回Set容器的键、值及键值对。需要注意的是Set容器只有键值,没有键名,因此key()和values()返回的都是键值。
              2. 可通过for...offorEach((value, key, that) => {})遍历。

              WeakSet(特殊的Set容器)

              WeakSet和Set相似,区别在于WeakSet只能存对象,且不可遍历。成员都是弱引用,因此随时都会消失。

              WeakSet常用方法有add()delete()has()用来添加成员、删除成员及判断是否存在。

              //实例化WeakSet对象
              var ws = new WeakSet();
              var obj = {};
              //添加成员
              ws.add(obj);
              //判断是否存在
              ws.has(obj); //true
              //删除成员,返回bool值判断是否成功
              ws.delete(obj); //true
              ws.has(obj); //false

              Map数据结构

              1. Map容器解决对象的键只能为字符串的问题,set(key, value)添加成员,delete(key)删除成员,has(key)判断成员是否存在,clear()清空容器。
              //实例化Set容器变量
              var mm = new Map();
              //添加成员
              mm.set('a', 1).set('b': 2); //Map { 'a' => 1, 'b' => 2 }
              //读取成员
              mm.get('a'); //1
              //判断成员是否存在
              mm.has(‘a’); //true
              //删除元素,返回bool值表示是否删除成功
              mm.delete('a'); //Map { 'b' => 2 }
              //查看成员数量
              mm.size; //1
              //清除Set容器内的所有元素
              mm.clear(); //Map {}
              1. keys()values()entries()返回Set容器的键、值及键值对。
              2. 可通过for...offorEach((value, key, that) => {})遍历。

              WeakMap(特殊的Set容器)

              WeakMap和Map相似,区别在于WeakMap的键只能是对象,且不可遍历。成员都是弱引用,因此随时都会消失。

              WeakMap常用方法有set()get()delete()has()用来添加成员、读取成员、删除成员及判断是否存在。

              Symbol数据类型

              Symbol是es6引入的第七种数据类型,用来表示独一无二的值,前六种分别是undefined、null、Boolean、String、Number和Object。

              1. Symbol作为对象属性名必须要用[]扩起来。
              2. Object.getOwnPropertySymbols(obj): 获取对象的所有用作属性名的Symbol值。
              3. Reflect.ownkeys: 返回对象的所有属性名,包括常规键名和Symbol键名。
              4. Symbol.for(name): 查找以name为名称的Symbol值,如果有返回这个Symbol值,否则新建一个以name命名的Symbol值。
              5. Symbol.keyFor(): 返回已经登记的Symbol值的名称,Symbol()方法不带登记机制,因此每次申请的都是不同的值,而Symbol.keyFor()带登记机制。
              FINISH

              Random Articles
              Life Countdown
              default