ES6基础知识点

ES5 及 ES6 中类的区别是什么?

  1. Object.keys 没法枚举出ES6里的属性和方法,ES5可以
  2. class 没有变量提升
  3. class 不可重复定义,ES5的function可以覆盖前面的

ES6 中的箭头函数有什么特性?和普通函数有什么区别?

  1. 自动绑定作用域的this,指向上层作用域。
  2. 箭头函数不能new。
  3. 箭头函数没有arguments
  4. 箭头函数直接return的时候可以省略
  5. call()/.apply()/.bind()无法改变箭头函数中this的指向
  6. 箭头函数没有原型prototype
  7. 箭头函数不能用作Generator函数,不能使用yeild关键字
  8. 箭头函数没有new.target

ES6 浅拷贝和深拷贝的区别是什么?分别手写实现。ES6中浅拷贝和深拷贝分别有哪些应用场景。

浅拷贝只会拷贝一层,如果改动了深层的对象,则原始对象也会被改变,深拷贝则不会。

浅拷贝:

  • Array.from()
  • Object.assign()
  • arr1 = [...arr]

深拷贝:

  • JSON.parse(JSON.stringify(data))

ES6 代码是如何转成 ES5的?

babel的转译过程也分为三个阶段:parsing、transforming、generating

  1. parsing 把输入的 ES6 代码字符串转换为 AST
  2. transforming 把 ES6 的 AST 转换为 ES5 的 AST
  3. generating 把 ES5 的 AST 生成为对应的 ES5 代码

ES6 的 class 继承为什么一定要写 super()?super代表什么?

ES6在继承中强制要求,必须在子类调用super,因为子类的this是由父类得来的。super等价于parent.prototype.constructor.call(sub)

  1. super即可以做为函数调用,又可以做为对象使用。做为函数时,只能在constructor内部调用。做为对象则可以在别的方法内调用。
  2. class B extends A {} super如果再静态方法内调用,super是父类(A),如果方法里有this,则指向该类(B),如果在原型方法内调用。super指向父类的原型(A),如果方法里有this,则指向该实例的原型(B)
  3. 给super添加属性或者修改,修改的是子类的属性,因为this是子类。

你可能感兴趣的:(ES6)