Typescript学习8 ( symbol | 迭代器 | 生成器 )

目录

一、symbol类型

1.symbol可以传递参做为唯一标识,只支持 string 和 numeber的参数,且symbol的值是唯一的

2.symbol.for,如果for中key注册过,则可以直接使用,而不是创建一个新的的key

3.symbol可以用作对象属性的键

4.symbol中定义的属性如何拿到

二、iterator迭代器

1.iterator支持遍历大部分类型,如arr,nodeList,argumetns,set,map等

2.iterator迭代器语法糖为for of

3.对象类型不能使用for of,因为对象不具有iterator

4.数组结构和...也是通过iterator实现的

三、generator生成器


一、symbol类型

1.symbol可以传递参做为唯一标识,只支持 string 和 numeber的参数,且symbol的值是唯一的
let a1: symbol = Symbol(1)
let a2: symbol = Symbol(1)
let a3: symbol = Symbol('num')
console.log(a1 === a2); //结果为false
2.symbol.for,如果for中key注册过,则可以直接使用,而不是创建一个新的的key
console.log(Symbol.for('123') === Symbol.for('123')); //结果为true
3.symbol可以用作对象属性的键
let sym = Symbol()
let obj = {
    [sym]: '1'
}
console.log(obj[sym]); //结果为1
4.symbol中定义的属性如何拿到
let a1: symbol = Symbol(1)
let a2: symbol = Symbol(1)
let obj = {
    [a1]: '123',
    [a2]: '123',
    name: '小胖'
}
//方法一,只能拿到对象中所有的symbol类型,其他的拿不到
console.log(Object.getOwnPropertySymbols(obj)); //结果为[ Symbol(1), Symbol(1) ]
//方法二,拿到对象中的所有属性
console.log(Reflect.ownKeys(obj)); //结果为[ 'name', Symbol(1), Symbol(1) ]
二、iterator迭代器
1.iterator支持遍历大部分类型,如arr,nodeList,argumetns,set,map等
let set: Set<number> = new Set([1, 1, 2, 3, 4, 4]) //set数组去重
​
let map: Map<any, any> = new Map() //<key,value>
let Arr = [1, 2, 3]
map.set(Arr, '小胖')
​
function args() {
    console.log(arguments);
}
​
//迭代器遍历
const test = (value: any) => {
    let It: any = value[Symbol.iterator]()
    let next: any = { done: false }
    while (!next.done) {
        next = It.next()
        if (!next.done)
            console.log(next.value);
    }
}
test(set) //遍历结果为 1 2 3 4
2.iterator迭代器语法糖为for of
for (let key of map) {
    console.log(key);
} //结果为[ [ 1, 2, 3 ], '小胖' ]
3.对象类型不能使用for of,因为对象不具有iterator
4.数组结构和...也是通过iterator实现的
let [a, b, c] = [1, 2, 3]
let Arr = [4, 5, 6]
let num = [...Arr]
console.log(a, b, c);
console.log(Arr);
三、generator生成器
function* test() {
    yield Promise.resolve('测试') //yield后面加同步异步均可
    yield 1
    yield 2
    yield 3
}
const dotest = test()
console.log(dotest.next()); //next每次执行只调用一个
console.log(dotest.next());
console.log(dotest.next());
console.log(dotest.next());
console.log(dotest.next());

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值