symbol,iterator,generator

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

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

时间: 2024-10-20 17:26:57

symbol,iterator,generator的相关文章

Es6 Symbol.iterator

Symbol.iterator 为每一个对象定义了默认的迭代器.该迭代器可以被 for...of 循环结构使用. --描述 当需要迭代一个对象的时候(比如在 for...of 循环的开始时),它的 @@iterator 方法就会被调用一次(0 个参数),同时返回的迭代器将被用来获取被迭代出来的值. 一些内建类型拥有默认的迭代器行为,其他类型(如 Object )则没有.下表中的内建类型拥有默认的@@iterator方法: Array.prototype[@@iterator]() TypedAr

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

iterator 接口 只要部署了 iterator 接口 symbol(symbol.iterator), 则可以进行 for...of  遍历 原文地址:https://www.cnblogs.com/tianxiaxuange/p/10122924.html

iteratable iterator generator 初步理解总结

# _*_coding:utf-8_*_ # author:leo # date: # email:[email protected] from collections import Iterable, Iterator class myIterator(): _data = None _count = 0 def __init__(self, data): self._data = data def __iter__(self): return self def __next__(self):

ES6中的迭代器(Iterator)和生成器(Generator)

前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作,于是ES6也向JS中添加了这个迭代器特性.新的数组方法和新的集合类型(如Set集合与Map集合)都依赖迭代器的实现,这个新特性对于高效的数据处理而言是不可或缺的,在语言的其他特性中也都有迭代器的身影:新的for-of循环.展开运算符(...),甚至连异步编程都可以使用迭代器 本文将详细介

ES6中的迭代器(Iterator)和生成器(Generator)(一)

用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作,于是ES6也向JS中添加了这个迭代器特性.新的数组方法和新的集合类型(如Set集合与Map集合)都依赖迭代器的实现,这个新特性对于高效的数据处理而言是不可或缺的,在语言的其他特性中也都有迭代器的身影:新的for-of循环.展开运算符(...),甚至连异步编程都可以使用迭代器 一.引入 下面是一段标

Generator

一.Generator概述 1.Generator函数是一个普通函数,但是有以下几个特征: function关键字与函数名之间有一个星号 //一般星号紧挨function关键字 函数体内部使用yield语句,定义不同的内部状态 //使用实例的next()方法可依次取得不同的状态 返回值是'遍历器对象' 返回值是本身Generator函数的一个实例 每一次调用都会产生新的'遍历器对象' 无论何种遍历方式  都只能遍历一次 //for...of||next()||...运算符  //只能被遍历一次

学习JavaScript中的异步Generator

本文和大家分享的主要是javascript中异步Generator相关内容,一起来看看吧,希望对大家学习javascript 有所帮助. 异步的generators和异步iteration已经到来 ! 这是错误的, 它们现在还在 阶段 3 ,这表示他们很有可能在JavaScript未来的一个版本中发布. 在他们发布之前,你可以通过 Babel 来在你的项目中使用还在阶段3的建议内容. 网站基本上还是一些分散运行的应用,因为任何在语言上的修改都会造成永久的影响,所以所有的未来的版本都需要向后兼容.

es6笔记5^_^set、map、iterator

一.set 1.基本用法 数据结构Set类似于数组,但是成员的值都是唯一的,没有重复的值. let s = new Set(); [2,3,5,4,5,2,2].map(x => s.add(x)) for (let i of s) {console.log(i)}// 2 3 5 4 //Set函数可以接受一个数组作为参数,用来初始化. var items = new Set([1,2,3,4,5,5,5,5]); console.log(items); // set object conso

ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环

ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, 3, 5, 4, 5, 2, 2].map(x => s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4 上面代码通过add方法向Set结构加入成员,结果表明Set结构不会添加重复的值. 向S