ES6学习笔记3(set、map和Symbol)
Reading Time:The full text has 894 words, estimated reading time: 5 minutes
Creation Date:2017-07-02
Previous Article:ES6学习笔记4(Proxy、Reflect)
Next Article:ES6学习笔记2(基础语法的拓展)
BEGIN
申明
阮一峰老师的ECMAScript 6学习笔记。
看到map和set还是有点亲切的,之前为了竞赛写了一年的c++,自认对STL用的也还顺手,一年没碰了,现在打开reference 🔗页面还是挺感慨的,连最基本的vector都忘了[摊手]。虽然用法忘了,但标准模板库的设计理念还在,尤其set和map容器,es6都加进来了,来看看有什么区别。咳咳,废话多了。。。
Set数据结构
Set容器类似数组,但成员的值都是唯一的。
- 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 ]
keys()
、values()
和entries()
返回Set容器的键、值及键值对。需要注意的是Set容器只有键值,没有键名,因此key()和values()返回的都是键值。- 可通过
for...of
及forEach((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数据结构
- 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 {}
keys()
、values()
和entries()
返回Set容器的键、值及键值对。- 可通过
for...of
及forEach((value, key, that) => {})
遍历。
WeakMap(特殊的Set容器)
WeakMap和Map相似,区别在于WeakMap的键只能是对象,且不可遍历。成员都是弱引用,因此随时都会消失。
WeakMap常用方法有set()
、get()
、delete()
和has()
用来添加成员、读取成员、删除成员及判断是否存在。
Symbol数据类型
Symbol是es6引入的第七种数据类型,用来表示独一无二的值,前六种分别是undefined、null、Boolean、String、Number和Object。
- Symbol作为对象属性名必须要用
[]
扩起来。 Object.getOwnPropertySymbols(obj)
: 获取对象的所有用作属性名的Symbol值。Reflect.ownkeys
: 返回对象的所有属性名,包括常规键名和Symbol键名。Symbol.for(name)
: 查找以name为名称的Symbol值,如果有返回这个Symbol值,否则新建一个以name命名的Symbol值。Symbol.keyFor()
: 返回已经登记的Symbol值的名称,Symbol()
方法不带登记机制,因此每次申请的都是不同的值,而Symbol.keyFor()
带登记机制。
FINISH
Previous Article:ES6学习笔记4(Proxy、Reflect)
Next Article:ES6学习笔记2(基础语法的拓展)