es6 语法

es6 语法

/*定义变量*/

  let a = 3; //变量
  const b = 5; //常量

/*数组解构 和 嵌套数组解构*/
  let[a,b,c,d] = ["aa","bb",77,88];
  let[e,f,[e,f]] = ["aa","bb",[55,66]];
  alert(e)

/*对象解构*/
  let obj = new Object();
  obj.uid = 111;
  obj.uname = "张三";
  let {uname:name,uid:id} = obj;//顺序无所谓
  alert(name);

/*字符串解构*/
  let [a,b,c,d] = '倚天屠龙';
  alert(a);

/*Symbol 唯一不重复*/
  let a = Symbol(3);
  let b = 3;
  alert(a==b);

/*自动去掉重复数据*/
  var set = new Set([1,2,3,4,5,4]);
  for(var i of set){
    console.log(i);
  }

/*es5里面的map*/
  [1,2,3,4,5,6,7].map(function(i){
    console.log(i);
  })

/*...变成数组*/
  var set = new Set([1,2,3,4,2,8,4]);
  var arr = [...set];
  console.log("set= "+set);
  console.log("arr= "+arr);

/*删除和清空*/
  var set = new Set([1,2,3,4,2,8,4]);
  set.delete(2);
  set.clear();
  console.log(set);

/*forEach 循环遍历*/
  var set = new Set([1,2,3,4,2,8,4]);
  set.forEach(function(value,key){
    console.log(value+"----"+key)
  })

/*过滤的方法*/
  var fiterArr = [ 1,2,3,4,2,8,4].filter(function(elem){
    if(elem>3){
      return true;
    }else{
      return false;
    }
  })
  console.log(fiterArr);

/*两个数组求并集*/
  let a = new Set([1,2,3]);
  let b = new Set([3,4,5]);
  let union = new Set([...a,...b]);
  console.log([...union]);

/*两个数组求交集*/
  let a = new Set([1,2,3]);
  let b = new Set([3,4,5]);
  let intersect = [...a].filter(function(elem){
    return b has(elem);
  });
  console.log(intersect);

/*两个数组求差集*/
  let a = new Set([1,2,3]);
  let b = new Set([3,4,5]);
  let difference = [...a].filter(function(elem){
    return !b has(elem);
  });
  console.log(difference);

/*weakset 不能取值,也不能显示,只能判断是否有重复的对象*/
  var weakset = new WeakSet();
  let aObj = {a:'aa'};
  let bObj = new String("你好");
  let cObj = new Number(8);
  weakset.add(aObj);
  weakset.add(bObj);
  weakset.add(cObj);

       weakset.delete(bObj);

  console.log(weakset.has(bObj));

/*替换 最后obj[key] 就一个66*/
  let objKey1 = {};
  let objKey2 = {};
  let obj = new Object();
  obj[objKey1] = 33;
  obj[objKey2] = 66;
  for (let key in obj) {
    console.log(obj[key]);
  }

/*map*/
  var mapData = new Map();
  var objKey1 = {};
  var objKey2 = {};
  mapData.set(objKey1,"333");
  mapData.set(objKey2,"666");
  console.log(mapData.get(objKey1));
  console.log(mapData.has(objKey1));
  console.log(mapData.delete(objKey1));
  mapData.clear();

/*WeakMap 不可遍历,所以没有size属性*/
  var wm = new WeakMap();
  var obj = new Object();
  wm.set(obj,'对象1');
  obj = null;
  console.log(wm.get(obj));
  console.log(wm.has(obj));

/*Iterator 遍历器*/
  let arr = ["123",4,"www.baidu.com","北京大学"];
  let it = arr[Symbol iterator](); //变成遍历器’
  for(;;){ //while true 快四倍
    let elem = it.next();
    if(elem.done){
      break ;
    }
  }
  console.log(it.next());
  console.log(it.next());
  console.log(it.next());
  console.log(it.next());
  console.log(it.next());

/*promise */
  let param;
  function p1(){
    return new Promise(function(resolve,reject){
      setTimeout(function(){
        console.log("aaa");
        param="我是123"; //传值可以用这个
        resolve(123);//返回值必填
        reject(123);//错误代号。必填
      },3000)
    })
  }
  function p2(){
    return new Promise(function(resolve,reject){
      setTimeout(function(){
        console.log("bbb");
        resolve(456);
      },2000)
    })
  }
  function p3(){
    return new Promise(function(resolve,reject){
      setTimeout(function(){
        console.log("ccc");
        resolve(789);
        console.log(param);
      },1000)
    })
  }
  p1().then(p2).then(p3).then(function(data){
    console.log("结束--"+data);
  }).catch(function(err){
    console.log('出错:'+err);
    if(err == 123){
      p2().then(p3);
    }
  })

/*async*/
  var sleep = function(time){
    return new Promise(function(resolve,reject){
      console.log("执行");
      setTimeout(function(){
        resolve();
      })
    })
  }
  let ten = [1,2,3,4,5,6,7,8,9];
  var start = async function(){
  //在这里使用起来就像同步代码那样直观
    console.log('start');
    for(let i=0;i<10;i++){
      await sleep(3000);
      console.log('当前是第${i}次等待、。。');
    }
    console.log('end');
  }

/*箭头函数 防止this转移*/
  let func = () => 'hello';
  console.log(func());


  let cheng = (a=3) => a*a;
  console.log(cheng(9));


  let add = (a,b) => a+b;
  console.log(add(3,3));

  let add1 = (a,b) =>{
    console.log(a+b);
    return a+b;
  }
  console.log(add1(3,9));