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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Symbol.iterator 是一个内置的 JavaScript 符号(Symbol),它用于定义一个对象的默认迭代器方法。迭代器方法是一个特殊的方法,它定义了一个对象在被迭代时应该如何返回和产生值。 通过在对象上使用 Symbol.iterator,可以为该对象定义一个迭代器方法。迭代器方法必须返回一个具有 `next()` 方法的对象,该方法在每次迭代时都会返回一个包含 `value` 和 `done` 属性的对象。`value` 表示当前迭代的值,`done` 表示迭代是否已完成。 迭代器方法通常在 `for...of` 循环中使用,该循环会自动调用对象的迭代器方法来遍历对象的值。 以下是一个简单的示例,展示了如何使用 Symbol.iterator 创建一个自定义的迭代器方法: ```javascript const myObject = { items: ['apple', 'banana', 'orange'], [Symbol.iterator]() { let index = 0; return { next: () => { if (index < this.items.length) { return { value: this.items[index++], done: false }; } else { return { value: undefined, done: true }; } } }; } }; for (const item of myObject) { console.log(item); } ``` 在这个示例中,`myObject` 对象使用了 Symbol.iterator,定义了一个迭代器方法。该迭代器方法返回一个对象,该对象包含 `next()` 方法,每次调用 `next()` 方法时都会返回一个包含当前值的对象,直到迭代完成。 运行上述示例代码,会输出 `'apple'`、`'banana'` 和 `'orange'`,分别表示每次迭代时的值。 这就是 Symbol.iterator 的基本概念和用法。希望能对你有所帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值