JavaScriptES6

Symbol generator

2019-10-06  本文已影响0人  Aniugel
ES6类
----------------------------------------------------------------
数据类型:
    number、string、boolean、Object、undefined、function

    用typeof检测出来数据类型:
        symbol

    new Number(12)
    new String()
    new Array()

symbol  使用情况一般

定义:
    let syml = Symbol('aaa');

注意:
    1. Symbol 不能new
    2. Symbol() 返回是一个唯一值
        坊间传说, 做一个key,定义一些唯一或者私有一些东
    3. symbol是一个单独数据类型,就叫 symbol, 基本类型

    4. 如果symbol作为key,用for in循环,出不来

json  ->  for in

---------------------------------------------------------------
箭头函数
    () =>{}

generator函数
    生成器


    解决异步深度嵌套的问题, async

语法:
    function * show(){
        yield
    }
    function* show(){
    }
    function *show(){
    }

    定义:
        function * gen(){
            yield 'welcome';
            yield 'to';
            return '牧码人';
        }
    调用:
        let g1 = gen();
        g1.next();  // {value:'welcome', done:false}
        g1.next();  // {value:'to', done:false}
        g1.next();  // {value:'牧码人', done:true}

    上述调用,手动调用,麻烦

for .. of  自动遍历 generator

    return的东西,它不会遍历

generator不仅可以配合 for ... of ...

还可以:

1. 解构赋值:
    let [a, ...b] = gen();
2. 扩展运算符
    '...'

    console.log(...gen());
3. Array.from()
    console.log(Array.from(gen()));

generator结合 axios数据请求:

-----------------------------------------------
异步: 不连续,上一个操作没有执行完,下一个操作照样开始
同步: 连续执行,上一个操作没有执行完,下一个没法开始

关于异步,解决方案:
    a). 回调函数
    b). 事件监听
    c). 发布/订阅
    d). Promise对象

co....
-----------------------------------------------
 // let syml = Symbol('aaa');
    // console.log(syml)

    // let syml = new Symbol('aaa');
    // console.log(syml)//报错

    // let symbol = Symbol('liu');
    // let json = {
    //     a: 'apple',
    //     b: 'banana',
    //     [symbol]: 'orange',
    // }
    // console.log(symbol)//Symbol(liu)
    // console.log(typeof symbol)//symbol
    // console.log(json[symbol])//orange

    // for (let key in json) {
    //     console.log(key)//a b
    // }

    // function* gen() {
    //     yield 'hello';
    //     yield 'world';
    //     return '牧马人'
    // }
    // let g1 = gen();
    // console.log(g1)//gen {<suspended>}
    // console.log(g1.next())//value: "hello", done: false}
    // console.log(g1.next())//{value: "world", done: false}
    // console.log(g1.next())//value: "牧马人", done: true}
    // console.log(g1.next())//value: undefined, done: true}

    // for (let val of g1) {
    //     console.log(val)
    // }

    // let [a, b, c] = gen()
    // console.log(a, b, c)//hello world undefined

    // let [a, ...b] = gen()
    // console.log(a, b)//hello ["world"]

    // console.log(...gen())//hello world
    // console.log(Array.from(gen()))// ["hello", "world"]

    function* gen() {
        let val = yield 'itstrive'
        yield axios.get(`https://api.github.com/users/${val}`)
    }
    let g1 = gen()
    let username = g1.next().value

    console.log(g1.next(username).value)
    console.log(username)
    g1.next(username).value.then(res => {
        console.log(res.data)
    })
上一篇 下一篇

猜你喜欢

热点阅读