• ES6注


    1、Promise构造函数

    //resolve(成功),reject(失败)两个参数
    function runAsync(){
      var p = new Promise(function(resolve,reject){
        //做一些异步操作
        setTimeout(function(){
          console.log('执行完成');
          resolve('执行完成数据');
        });
      });  
      return p;
    }
    runAsync();

    then、catch

    //链式操作
    runAsync()
      .then(function(data){
        console.log(data);
        return runAsync2();
      })
      .then(function(data){
        console.log(data);
      })
    //then-catch
    runAsync()
      .then(function(data){
        console.log('resolved-'+data);
      })
      .catch(function(reason){
        console.log('rejected-'+reason);
      });

    all的用法:并行执行,所有异步操作执行完才执行回调

    runAsync()
      .all([runAsync1(), runAsync2(), runAsync3()])
      .then(function(results){
        console.log(results);
      });

    race的用法:先执行完一个异步操作就执行回调

    runAsync()
      .race([runAsync1(), runAsync2(), runAsync3()])
      .then(function(results){
        console.log(results);
      });

     2、三点运算符(...):浅拷贝

    对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。

    let obj2 = {...obj1}; //浅拷贝,修改obj2会同步修改obj1

    注意:如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。

    const [...rest, last] = [1, 2, 3, 4, 5];
    // 报错
    const [first, ...rest, last] = [1, 2, 3, 4, 5];
    // 报错

    扩展运算符还可以将字符串转为真正的数组

    [...'hello']
    // [ "h", "e", "l", "l", "o" ]

     3、symbol

    应用场景1:可以更好的设计我们的数据对象,我们可以把不需要对外操作和访问的属性用symbol来定义。

    let obj = {
       [Symbol('name')]: '一斤代码',
       age: 18,
       title: 'Engineer'
    }
    
    Object.keys(obj)   // ['age', 'title']
    
    for (let p in obj) {
       console.log(p)   // 分别会输出:'age' 和 'title'
    }
    
    Object.getOwnPropertyNames(obj)   // ['age', 'title']
    JSON.stringify(obj); //{'age': 18, 'title': 'Engineer'}

    会有一些针对symbol的API:

    // 使用Object的API
    Object.getOwnPropertySymbols(obj) // [Symbol(name)]
    // 使用新增的反射API Reflect.ownKeys(obj) // [Symbol(name), 'age', 'title']

    应用场景2:使用symbol来代替常量

    const TYPE_AUDIO = Symbol();
    const TYPE_VIDEO = Symbol();
    console.log(TYPE_AUDIO===TYPE_VIDEO); //false,Symbol()是唯一的

    应用场景3:使用symbol来定义类的私有属性/方法

    const PASSWORD = Symbol();
    class Login {
      constructor(username, password){
        this.username = username;
        this[PASSWORD] = password;
      }
      checkPassword(pwd){
        return this[PASSWORD] === pwd;
      }
    }

     注册和获取全局Symbol

    let gs1 = Symbol.for('global_symbol_1'); //注册一个全局Symbol
    let gs2 = Symbol.for('global_symbol_1'); //获取全局Symbol
    gs1===gs2; //true
  • 相关阅读:
    如何在ubuntu里面使用JNI?
    sql server 关键字一
    自己编写的 objectDataSource 配合 GridView 实现分页...
    委托和匿名委托的比较
    实现 IEnumerable IEnumator 接口的类,可直接用作 Gridivew 的数据源
    ASP.NET 中的页面事件执行顺序
    泛型,集合的根本区别
    匿名委托的示例,贴一下以供参考...
    ajax "Sys 未定义" 的问题解决方法
    抽象工厂模式(C#)
  • 原文地址:https://www.cnblogs.com/shirliey/p/11194429.html
Copyright © 2020-2023  润新知