码迷,mamicode.com
首页 > 其他好文 > 详细

symbol,iterator,generator

时间:2019-07-29 00:47:00      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:私有   私有属性   数据类型   gen   ESS   生成器   迭代   div   evel   

1.symbol是在ES6中引入的一种基本数据类型,因为symbol是不重复、唯一的数据特性,symbol设计是被用来表示对象内部的私有属性的。
 
 
symbol.for与symbol.keyfor:
 
let a = Symbol.for(‘123’)

let b= Symbol.for(‘123’)

 

a == b // true

 

(在全局用这个key来registry)

 

Symbol.for是这样工作的, 先搜索全局用这个key注册的Symbol,如果没有,用key在全局注册一个Symbol

 

Symbol.keyfor搜索全局Symbol registry,找到这个Symbol的key

 

Symbol.keyfor(a) //123

Symbol.keyfor(b)  //123

 
有一些JS内置对象内部有[Symbol.iterator]属性,该属性对应了一个符合iterator protocol的迭代方法,以此该对象才具有可迭代(iterable)的特性(常见的,如for...of就是在调用迭代方法),实现了这些方法的对象包括数组、类数组对象(函数的arguments对象)、(普通对象没有实现[Symbol.iterator])
 
 
 
2.可迭代的(iterable protocol):如果一个对象实现了[Symbol.iterator]方法,并且该方法是一个迭代器,那么这个对象是可迭代的
 
 
 
3.迭代器(iterator protocol):如果一个对象内部有一个next方法,该方法是无参的,并返回一个有value属性和done属性的对象,那么这个对象是一个迭代器
 
 
 
4.生成器(generator function):生成器函数会生成一个生成器对象(generator object),生成器函数用function* expression 来声明,内部可以进行yield和return操作
 
生成器对象(generator object):生成器对象由生成器生成,并且是可迭代的,这种对象满足了iterable protocol和iterator protocol
 
 
 
资料:
- https://developer.mozilla.org/en-US/docs/Glossary/Symbol
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator

symbol,iterator,generator

标签:私有   私有属性   数据类型   gen   ESS   生成器   迭代   div   evel   

原文地址:https://www.cnblogs.com/eret9616/p/11261564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!