请选择 进入手机版 | 继续访问电脑版
猿人社区
查看: 22|回复: 0

[干货] ECMAScript2015 ES6 Symbol generator yield

[复制链接]

88

主题

88

帖子

429

积分

管理员

Rank: 9Rank: 9Rank: 9

注册时间
2018-7-24
最后登录
2018-12-8
在线时间
68 小时
威望
18
金钱
293
贡献
12
发表于 2018-11-30 11:23:38 | 显示全部楼层 |阅读模式
Symbol开头必须大写,声明时不用加 new 关键词
数据类型 “symbol” 是一种原始数据类型,该类型的性质在于这个类型的值可以用来创建匿名的对象属性。
Symbol(description?: string | number)

实例:
  1. let symStr=Symbol("ABC中文");
  2.     let symNum=Symbol(123456);
  3.     console.log(symStr,symNum);
复制代码
返回值:Symbol(ABC中文) Symbol(123456)



generator 生成器对象function关键词和函数名称中间加 * 代表是generator函数
function * funName(){ yield }
返回值是个对象

实例:
step是个生成器函数 里面的num是生产值
每次console.log相当于执行step一次
当执行到return()的时候就是结束生成器生成了,
  1. function * step(){
  2.       let num=0;
  3.       while(true){
  4.         yield num++;
  5.       }
  6.     }

  7.     let s=step();
  8.     console.log(s.next());
  9.     console.log(s.next());
  10.     console.log(s.return());
  11.     console.log(s.next());
复制代码
控制台输出:


遍历generator
  1. function * step(){
  2.       yield num =1;
  3.       yield letter="ABC";
  4.       return "HAHA";
  5.     }

  6.     let s=step();
  7.     for(let val of s){
  8.       console.log(val);
  9.     }
复制代码

控制台输出:1 ABC
”HAHA“没输出 是因为循环的时候会跳过return


解构generator
  1. function * step(){
  2.       yield num =1;
  3.       yield letter="ABC";
  4.       return "HAHA";
  5.     }

  6.     let [a,b]=step();
  7.     console.log(a,b);
复制代码
输出:1 "ABC"

当然也支持 扩展运算符三个点 ...
  1. function * step(){
  2.       yield num =0;
  3.       yield letter="ABC";
  4.       yield num1=123;
  5.       yield num2=456;
  6.       return "HAHA";
  7.     }

  8.     let [a,b,...c]=step();
  9.     console.log(a,b,c);
复制代码
控制台打印输出:0 "ABC" (2) [123, 456]
或者 直接结构 generator对象
  1. function * step(){
  2.       yield num =0;
  3.       yield letter="ABC";
  4.       yield num1=123;
  5.       yield num2=456;
  6.       return "HAHA";
  7.     }

  8.     console.log(...step());
复制代码
控制台打印输出:0 "ABC" 123 456








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住社区

x
您需要登录后才可以回帖 登录 | 入住社区

本版积分规则

Archiver|手机版|小黑屋|Deaf community

GMT+8, 2018-12-12 19:32 , Processed in 0.057167 second(s), 19 queries .

Powered by Discuz! X3.4© 2001-2017 Comsenz Inc. Template design by Penday

快速回复 返回顶部 返回列表