ES5 及 ES6 中类的区别是什么?
- Object.keys 没法枚举出ES6里的属性和方法,ES5可以
- class 没有变量提升
- class 不可重复定义,ES5的function可以覆盖前面的
ES6 中的箭头函数有什么特性?和普通函数有什么区别?
- 自动绑定作用域的this,指向上层作用域。
- 箭头函数不能new。
- 箭头函数没有arguments
- 箭头函数直接return的时候可以省略
- call()/.apply()/.bind()无法改变箭头函数中this的指向
- 箭头函数没有原型prototype
- 箭头函数不能用作Generator函数,不能使用yeild关键字
- 箭头函数没有new.target
ES6 浅拷贝和深拷贝的区别是什么?分别手写实现。ES6中浅拷贝和深拷贝分别有哪些应用场景。
浅拷贝只会拷贝一层,如果改动了深层的对象,则原始对象也会被改变,深拷贝则不会。
浅拷贝:
- Array.from()
- Object.assign()
- arr1 = [...arr]
深拷贝:
- JSON.parse(JSON.stringify(data))
ES6 代码是如何转成 ES5的?
babel的转译过程也分为三个阶段:parsing、transforming、generating
- parsing 把输入的 ES6 代码字符串转换为 AST
- transforming 把 ES6 的 AST 转换为 ES5 的 AST
- generating 把 ES5 的 AST 生成为对应的 ES5 代码
ES6 的 class 继承为什么一定要写 super()?super代表什么?
ES6在继承中强制要求,必须在子类调用super,因为子类的this是由父类得来的。super等价于parent.prototype.constructor.call(sub)
- super即可以做为函数调用,又可以做为对象使用。做为函数时,只能在
constructor
内部调用。做为对象则可以在别的方法内调用。 class B extends A {}
super如果再静态方法内调用,super是父类(A),如果方法里有this,则指向该类(B),如果在原型方法内调用。super指向父类的原型(A),如果方法里有this,则指向该实例的原型(B)- 给super添加属性或者修改,修改的是子类的属性,因为this是子类。