ES6入门---第三单元 模块二:Symbol & generator

数据类型:
    number、string、boolean、Object、undefined、function

 在ES6中又新增了symbol

语法:

let syml = new Symbol('aaa');

像其他数据类型,可以new

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

注意:

1、但symbol不可以new

2、Symbol() 返回是一个唯一值

3、如何检验、输出变量数据类型:用typeof

let syml = Symbol('aaa');

        console.log(typeof syml);

4、可以当key值使用:

  let symbol = Symbol('Strive');

        let json ={
            a:'apple',
            b:'banana',
            [symbol]:'aaa'
        };

        console.log(json[symbol]);

5、当symbol作key,用for in循环出不来

 let symbol = Symbol('Strive');

        let json ={
            a:'apple',
            b:'banana',
            [symbol]:'aaa'
        };

        for(let key in json){
            console.log(key);
        }

输出时没有symbol作的key

generator函数
    ‘生成器’
    解决异步,深度嵌套的问题,现在有更好的解决方案: async
】 

语法:

function * show(){
		yield
	}
	function* show(){
	}
	function *show(){
	}

定义+调用:

 function * gen(){
            yield 'welcome';//第一步
            yield 'to';//第二步
            return '牧码人';//第三步
        }
        let g1 = gen();
        console.log(g1.next()); //{value: "welcome", done: false没完成}
        console.log(g1.next()); //{value: "to", done: false}
        console.log(g1.next()); //{value: "牧码人", done: true}

        console.log(g1.next());

循环调用:

for(let val of g1){
            console.log(val);//不会遍历到return!
        }

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

1、解构赋值

function * gen(){
            yield 'welcome';
            yield 'to';
            yield '51mmr.net';
            return '牧码人';
        }
        //let [a,b,c] = gen();//只能解构yield 结果中c=undefind
        let [a, ...b] = gen();//let[a.b.c]

        console.log(a, b);

2、 扩展运算符

跟解构的结果一样

 console.log(...gen());

 3. Array.from()
    console.log(Array.from(gen())); 等于数组了

4、实例:【generator结合 axios数据请求:常配合promise】

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        //https://api.github.com/users/itstrive

        function * gen(){
            let val = yield 'aaa';
            yield axios.get(`https://api.github.com/users/${val}`);
        }

        let g1 = gen();

        let username = g1.next().value;

        //console.log(g1.next(username).value);

        g1.next(username).value.then(res=>{
            console.log(res.data);
        });
    </script>

 【关于异步】

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

猜你喜欢

转载自blog.csdn.net/qq_41775119/article/details/81810403
今日推荐