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  ,generator object是迭代器
 
 
 
资料:
- 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的更多相关文章

  1. ES 6 proimse &&iterator &&Generator函数 &&async

    1.proimse 异步调用function getData(){ let promise =new Promise((resolve,reject)); let xmlHttp =new XMLHt ...

  2. 关于Symbol.iterator 学习笔记

    1.可以部署在对象上的一个遍历器 2. 遍历器是一个函数,需要返回一个含有一个next 方法的对象 const likeArray = {0:'a', 1: 'b', 2: 'c',3: 'd'. l ...

  3. Iterator遍历器 调用Symbol.Iterator属性,遍历器对象。

    Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置.也就是说,遍历器对象本质上,就是一个指针对象. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员. 第二次调 ...

  4. Es6 Symbol.iterator

    Symbol.iterator 为每一个对象定义了默认的迭代器.该迭代器可以被 for...of 循环结构使用. --描述 当需要迭代一个对象的时候(比如在 for...of 循环的开始时),它的 @ ...

  5. ECMA Script 6_symbol(symbol.iterator) 新接口_iterator接口

    iterator 接口 只要部署了 iterator 接口 symbol(symbol.iterator), 则可以进行 for...of  遍历

  6. Symbol.iterator 和 for of

    Symbol.iterator 和 for of 是es6的新特性 可以为对象设置 自己的迭代器 首先介绍我们的for of var arr = [1,2,3,8,33] for (var i of ...

  7. ES Next & Arrow function & Promise & Iterator & Generator yield & Async Await

    ES Next & Arrow function & Promise & Iterator & Generator yield & Async Await co ...

  8. python3:iterable, iterator, generator,抽象基类, itertools的使用。

    目录: iterable对象 iterator对象, 数据类型Iterator类 数据类型Generator类. 生成器表达式 collections.abc:容器的抽象基类.用于判断具体类. ite ...

  9. Symbol.iterator的理解

    https://blog.csdn.net/margin_0px/article/details/82971545

随机推荐

  1. 在ubuntu上使用Openresty+lua实现WAF----折腾笔记

    1.1 参考loveshell的waf实现思路,再此感谢下面其中一部分是转载 1.2 WAF的功能 支持IP白名单和黑名单功能,直接将黑名单的IP访问拒绝.支持URL白名单,将不需要过滤的URL进行定 ...

  2. 72. Edit Distance (JAVA)

    Given two words word1 and word2, find the minimum number of operations required to convert word1 to  ...

  3. Nagios-Nagios-Nagios系统监控(centos7部署源码)

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  4. redis中如何存储java对象

    根据redis的存储原理,Redis的key和value都支持二进制安全的字符串 1.利用序列化和反序列化的方式 存储java对象我们可以通过对象的序列化与反序列化完成存储于取出,这样就可以使用red ...

  5. 关于react中context的使用

    context是用于组件间数据的传递,就是减少props的使用 具体使用也很简单 第一步设置默认值,第二部用provider发放,第三步使用contextType来接受最近的provider,然后直接 ...

  6. 《SaltStack技术入门与实践》—— Grains

    Grains 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 前几章我们已经了解SaltStack各个组件以及通过一个案例去熟悉它的各种应用,从这章开 ...

  7. AJAX - 向服务器发送请求请求

    AJAX - 向服务器发送请求请求 XMLHttpRequest 对象用于和服务器交换数据.直线电机生产厂家 向服务器发送请求 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 ...

  8. CDOJ 1061 C - 秋实大哥与战争 STL set 迭代器

    题目链接: C - 秋实大哥与战争 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Sub ...

  9. 【HDU6667】Roundgod and Milk Tea【贪心】

    题目大意:给你ai,bi,限制ai不能流向bi,求最大流 题解:贪心,对于第i个班级,考虑前i-1个班级匹配完剩余多少a,b,将这些ab对第i个班级进行贪心匹配 匹配完若第i个班级还有剩余的ab,考虑 ...

  10. 【bzoj3223】Tyvj 1729 文艺平衡树

    题目描述: 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入 ...