【前端学习之路】 ES6新特性 Symbol 和 Iterator(尚硅谷课程笔记)

发布于:2022-08-08 ⋅ 阅读:(477) ⋅ 点赞:(0)

由于本人在网上能找到的课程都对新手不太友好,于是 参照阮一峰老师的文档进行自己的理解,做出如下笔记:

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 接口的数据结构:

 


网站公告

今日签到

点亮在社区的每一天
去签到