深入浅出ES6教程『Symbol & generator』

☞☞ 个人主页欢迎访问 ☜☜


大家好,本人名叫苏日俪格,大家叫我 (格格) 就好,在上一章节中我们学到了类和继承的用法,下面我们一起来继续学习Symbol & generator:

下面让我们来认识一下数据类型的新成员:Symbol,它的英文翻译是符号,还有一个注意点,他和其他数据类型不一样,Symbol本身不是一个构造函数,也是独一无二的值,下面来看一下具体用法:

let syml = Symbol('asdsa');
console.log(syml);  // Symbol(asdsa)
console.log(typeof syml);   // symbol

谨记:当Symbol被for...in循环当做key的时候,是输出不了的

当Symbol被当做属性名来用的时候:

let syml = Symbol();
let json = {
    [syml]: 'aaa'
}

Symbol一般可能会用在多人编码的时候,造成的变量名冲突的问题,不过这种低级错误相信大家一般不会犯的,因此能看得出来用处不大。下面让我们看一下generator,中文的意思是生成器,他是一个函数,是为了解决异步和深度嵌套的问题;,函数写法是function * show(){},声明变量用yield,有一个默认的返回值,执行的时候用next()方法,执行结果有两个参数,value(值)、done(函数中是否还含有其他代码没有执行完)

function * show(){
    yield name = '苏日俪格';
    yield age = 24;
    return 1;
}
let s = show();
console.log(s.next());  // {value: "苏日俪格", done: false}
console.log(s.next());  // {value: 24, done: false}
console.log(s.next());  // {value: 1, done: true}
console.log(s.next());  // {value: undefined, done: true}

正如例子中所看到的,最后执行完了就是undefined

小白:这种看起来也挺好理解的,但是写的太麻烦了,对于next()有没有简写形式呢?
格格:机智如你( σ'ω')σ

还记得我们前面学的for...of循环不:

function * show(){
    yield name = '苏日俪格';
    return 1;
}
let s = show();
for (let item of s) {
    console.log(item);  // 苏日俪格
}

该函数也可以配合解构赋值和扩展运算符来用:

function * show(){
    yield name = '苏日俪格';
    yield age = 24;
    yield job = '前端开发';
}
let [a,b,c,d] = show();
let [e,...f] = show();
console.log(a,b,c,d);   // 苏日俪格 24 前端开发 undefined
console.log(e,f);   // 苏日俪格 [24, "前端开发"]
console.log(...show()); // 苏日俪格 24 前端开发

还可以和Array.from()配合,直接将generator函数直接放进数组输出:

function * show(){
    yield name = '苏日俪格';
    yield age = 24;
    yield job = '前端开发';
}
console.log(Array.from(show()));    // ["苏日俪格", 24, "前端开发"]

关于generator的一些玩法先介绍这么多,下面来介绍一下它到底是如何处理异步的:



关于异步的处理方式就很尴尬了,因为我也不太会(lll¬ω¬),还是参考阮一峰大大的吧:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html

关于Symbol & generator我们都已经了然于心,预知async函数如何,请听下回分解 (^∀^)/~~~

本文的所有内容均是一字一句敲上去的,希望大家阅读完本文可以有所收获,因为能力有限,掌握的知识也是不够全面,欢迎大家提出来一起分享!谢谢O(∩_∩)O~

欢迎访问我的GitHub,喜欢的可以star,项目随意fork,支持转载但要下标注,同时恭候:个人博客

等一下( •́ .̫ •̀ ),我还有最后一句话:
这里虽然没有都市的繁华,
也没有山林的鸟语花香,
只有一片如水的宁静,
古人云:
既来之则安之,
既然来到了这里,
就可以静心休憩你的灵魂,
调养你疲惫的心,
再见...

你可能感兴趣的:(深入浅出ES6教程『Symbol & generator』)