es6一句话拾遗

  • Symbol最大的作用就是用于消除魔术字符串;
  • Set跟数组的最大区别,就是Set的成员都是唯一的,没有重复;(方法:add(value),has,delete,clear)
  • Map跟对象的最大区别,就是对象只能用字符串作为键,Map不是;(方法:get,set(key,value),has,delete,clear)
  • let和var最大的区别是,let声明的变量是块内有效的(块内不允许重复声明,块外可以);不会变量提升(声明之前使用);
  • 变量的解构赋值:let { a: b } = { a: 3 };//b等于3(其他你都懂,这个也很好记的哦)
  • 正则表达式i不区分大小写,g全局搜索;/[A-Z]/匹配一个大写字母,/(1|9)/匹配字母1或者字母9,小括号只匹配字符,{3,9}匹配在它之前的表达式最少出现3次,最多出现9次;^$行首和行位;/x(?=y)/代表x在y之前;
  • call方法:func.call(thisObj,param1,param2); apply方法:func.apply(thisObj,param1,param2); bind方法:func.bind(thisObj,param1,param2)();
  • 递归调用应该注意栈溢出的问题,可以考虑尾递归优化,然而尾递归优化只在严格模式strict下才有效,还可以考虑蹦床函数,用无限循环替换递归;(别忘记跳出循环的条件)
  • Object.assign(target,source1,source2);把源对象的属性复制到目标对象,同名属性后面覆盖前面的;
  • Object.keys(target);Object.values(target);Object.entries(target);//entries返回二维数组
  • Proxy是访问对象的代理,外界对象对目标对象的访问,必先通过代理;
  • Promise的catch方法,除了抓Promise内部的错误之外,还抓then回调函数的错误;然而如果你没有reject,它是什么也抓不到的;用done就可以:let result = await func1().done();然而done又没有回调函数,finally就有 await func1().finally(cb);
  • Promise.all([p1,p2,p3,p4])与Promise.race([p1,p2,p3,p4])是成对儿的,所有都完成&只要有一个完成;参数是promise实例的数组;
  • 多个await操作如果没有继发关系,应该考虑使用Promise.all,让他们同时触发;Promise.all是不会继发执行的;
  • Generator函数是*和yield结合,调用的时候用next(), 返回值是个对象,对象里有done属性,还可以传参数给next