symbol类型
Symbol
使用方法
自ES2015起,symbol成为了一种新的原生类型,就像number和string一样
symbol类型的值通过Symbol构造函数创建,可以传递参数(string|number|undefined)作为唯一标识
两个symbol即使构造时传递的参数相同,它们也是不同的(主要是内存地址不同),因为symbol就是唯一标识
如果使用Symbol.for()
创建symbol,它就会查找当前所有symbol值,如果有重名symbol(字面上),则复用;没有则新建
1 | // true,因为symbol会在全局查找有没有注册过这个key(此处是"yajue") |
可以把symbol理解成分别创建两个变量,它们字面量看似相同,实则因地址不相同,所以两个变量不相同,这样的引用类型变量
Symbol的应用场景
symbol诞生的目的就是作为对象键的唯一值
1 | let obj = { |
遍历对象键的方法取得symbol键的情况:
1 | // for in中读不到symbol |
生成器和迭代器
生成器和迭代器的用法其实一样,就是写法不同
生成器
带星号*的函数就是一个生成器(generator),自带关键字yield用于返回迭代值
1 | // 1.生成器generator 带星号*的函数就是一个生成器 |
迭代器
使用迭代器可以遍历可迭代对象
1 | // 这些类型的身上都藏着迭代器 |
评论