阴影中的曙光

ES6补完计划

2018.08.29 / 技术相关 / 点击 173 / 回复 0 / JavaScript, ES6

8012年了啊,你咋还在学ES6啊( 'ω')

  • 用let进行变量声明的时候会出现临时死区,同C没啥好说的

字符串(以下方法均为字符串方法)

  • codePointAt();返回字符串对应编码单元上的码位。
  • charCodeAt();返回字符串对应编码单元上的一个编码单元。
  • normalize();对参数字符串进行Unicode标准化。
  • repeat();传入一个数字N,返回字符串N次循环拼接成的字符串。
  • includes();如果在字符串中检测到指定文本则返回true。
  • startsWith();如果在字符串的起始位置检测到指定文本则返回true。
  • endsWith();如果在字符串的结束部分检测到指定文本则返回true。

上边三个方法都可以接受第二个参数用以指定起始位置的偏移量或结束位置的偏移量。

函数

  • ES6中可以通过在函数声明的时候function(a = 10,b = ‘sss’)这样的形式进行默认参数设置
  • 用于创造对象的临时构造函数 var add = new function (“first”,”second ”,”return first+second”);
  • ES6中函数有两个内部方法[[Call]]和[[Construct]],当通过new关键字调用函数时执行的是[[Construct]]其负责创建一个实例对象,然后执行函数体并且把this绑定到实例上。直接调用函数则使用[[Call]]函数直接执行函数体。函数内可以通过new.target来判断函数被以何种方式调用,其值为new操作目标则为构造调用,为undefined则为常规调用
  • 箭头函数没有this,super,arguments,new.target,的绑定所以上下文与其父级属性相同
  • ES6进行了尾调用优化,需满足:调用函数不是闭包。return语句在函数末尾。尾调用结果作为函数值返回。

对象

  • 通过setPortotypeof()改变对象的原型参数。
  • 通过Super()获取对象原型的上下文
  • 收回之前 Object.definProperty()没卵用的话,在ES6中使此函数可以修改Symbol.hasInstence 等不可写属性(第三个参数传入value:function(v)return false;)以达到一些目的
  • 去重集合set(),默认强引用,WeakSet()弱引用
  • 属性名不会被强转的键值对集合

迭代器和生成器

  • 迭代器传参
function *createIterator(){
     console.log('000');
    let one = yield 1;
    console.log('1111');
    let second = yield one + 2;
    console.log('222');
    yield second +3;
}
let text = createIterator();
console.log(text.next());
console.log(text.next(4));
console.log(text.next(5));
console.log(text.next());
//结果:
000
{ value: 1, done: false }
1111
{ value: 6, done: false }
222
{ value: 8, done: false }
{ value: undefined, done: true }

 

迭代器的执行顺序为第N此执行会调取第N-1次yield语句的执行结果,并执行N-1个yield行到第N个yield行间的代码,输出结果为yield右侧语句结果。
而在调用next()函数时传递的参数用于代替N-1次yield的返回值,即N-1个yield和其右侧部分的代码。