由于本人在网上能找到的课程都对新手不太友好,于是 参照阮一峰老师的文档进行自己的理解,做出如下笔记:
ES6 入门教程 (阮一峰老师的ES6入门)
1、Symbol 数据类型
ES6引入的一种新的原始数据类型Symbol,表示独一无二的值,是一种类似于字符串的数据类型。
1) Symbol的值是唯一的,用来解决命名冲突的问题
2) Symbol的值不能与其他数据类型进行运算
3) Symbol定义的对象属性不能使用for...in 循环遍历,但是可以使用Reflect.ownkeys来获取对象的所以键名
symbol 数据类型对象的创建两种方式
Symbol函数的参数只是表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不相等的。
作为属性名的Symbol
由于每一个Symbol值都是不相等的,这意味着Symbol值可以作为标识符,用于对象的属性名,这对于一个对象由多个模块构成的情况非常适用,能防止某一个键被一不小心改写或覆盖。
* 通过方括号结构,将对象的属性名指定为一个Symbol值
获取Symbol定义的属性
遍历该对象时,其属性不会出现在for..in循环中,利用Object.getOwnPropertyNames()返回一个数组,成员就是当前对象的所有用作属性名的Symbol值
除此之外,还有一个新的API,Reflect.ownKeys()方法可以返回所有类型的键名,包括常规键名和Symbol键名。
2、Iterator(遍历器)的概念
JavaScript 原有的表示集合的数据结构,主要是数组和对象,ES6新添加了 Map 和 Set。这四种数据集合可以任意组合使用,由用户定义自己的数据结构,比如数组的成员是Map, Map的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。
遍历器(Iterator)就是这样一种机制,它是一种接口,为各种不同的数据结构提供统一的访问机制。
Iterator的遍历过程:
1、创建一个指针对象,指向当前数据结构的起始位置,换句话说,遍历器对象本质是一个指针对象。
2、第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
3、第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
4、不断调用next方法,直到指向数据结构的结束位置。
每一次调用next方法,都会返回数据结构的当前成员信息,即一个包含value和done两个属性的对象,其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。
由于 Iterator 只是把接口规格加到数据结构之上,所以,遍历器与其所遍历的那个数据结构,实际上是分开的。ES6 规定,默认的 Iterator 接口部署在数据结构的 Symbol.iterator 属性上,这个属性本身就是一个函数,这是一个预定义好的、类型为 Symbol 的特殊值,所以要放在方括号内。
只要具有 Symbol.iterator 属性,就证明该数据结构是可遍历的,执行该属性,就会返回一个遍历器对象(具有 value 和 done 两个属性),该对象的根本特征就是具有 next 方法。
原生具备 Iterator 接口的数据结构: