当前位置: 首页 > Web前端 > HTML

ES6前端面试篇(高产如母猪)

时间:2023-04-03 00:10:06 HTML

这也是前端面试经常被问到的问题。我经常问你es6出现了哪些新特性,平时用过的。写这个教程的时候,第一句话往往是面试中经常被问到的地方,然后是他的详细解释。面试需要的内容我会用*标注。写技术文档真的很累。虽然看别人的文档,但是自己也要多看,自己总结。所以如果觉得对你有用,请给个star吧。https://github.com/skychenbo1。箭头函数需要注意的地方2.ES6let,const3,set数据结构4.promise对象的使用,写一个promise5class的理解6模板语法的理解7rest参数8模块中箭头函数的注意点system*需要动态上下文时不能使用箭头函数。即this的固定化1.使用=>定义函数时,this指向定义所在的对象,而不是使用所在的对象。2.不能作为构造函数,也就是说不能用new命令,否则会报错3.arguments对象不能用4.yield命令不能用一直很烦,但是with=>妈妈不用担心你使用这个类Animal{constructor(){this.type='animal'}says(say){setTimeout(function(){console.log(this.type+'says'+say)},1000)}}varanimal=newAnimal()animal.says('hi')//undefinedsayhi让我们再看一遍=>classAnimal(){constructor(){this.type='animal'}says(say){setTimeout(()=>{console.log(this.type+'says'+say)},1000)}}varanimal=newAnimal()animal.says('hi')//animal说hiES6let和const*let是更完美的vars,不是全局变量,具有块级函数作用域,大多数情况下不会出现变量提升。const定义了一个常量值,不能重新赋值。如果值是对象,则可以更改对象中的属性值。let1.let声明的变量具有块级作用域2.let声明的变量不能通过window访问。变量名3,形如for(letx..)的循环每次迭代都会为x创建一个新的绑定以下是varvara=[]for(vari=0;i{if(operationissuccessful){resolve(value)}else{reject(error)}})promise.then(function(value){//success},function(value){//failure})Class解释*类语法更接近于原型、构造函数和继承传统语法,它的写法可以让对象原型的写法更清晰,面向对象编程语法更受欢迎。这是classclassAnimal{constructor(){this.type='animal'}says(say){console.log(this.type+'says'+say)}}letanimal=newAnimal()的具体用法animal.says('hello')//动物说你好classCatextendsAnimal{constructor(){super()this.type='cat'}}letcat=newCat()cat.says('hello')//catsayshello可以看出,使用extend时,结构体输出的是catsayshello,而不是animalsayshello,说明contructor内部定义的方法和属性都是实例对象本身,不能通过extends继承。super()出现在cat类中,是什么?在ES6中,子类的构造函数必须包含超函数。super表示调用父类的构造函数。虽然是父类的构造函数,this指向但是是catObject.assign方法varn=Object.assign(a,b,c)添加a,b,c属性模板语法*是这样的形式${variable},以前我们在连接字符串和变量的时候,需要用'string'+varible+'string'这个方法,但是有了模板语言,我们可以用string${variable}string来连接剩下的parameter*es6引入rest参数获取函数的额外参数,这样就不需要使用argumentsobjectex:functionadd(...values){letsum=0for(varvalofvalues){sum+=val}returnsum}modulesystem*历史上js因为没有modulesystem,不可能把一个大程序拆分成一些小程序。在es6之前,有commonJs和AMD。CommonJS是怎么写的?constanimal=require('./content.js')//content.jsmodule.exports='acat'require.jsdoesthis//content.jsdefine('content.js',function(){return'Acat'})require(['./content.js'],function(animal){console.log(animal)//acat})ES6语法(这是我在vue中使用的)importanimalfrom'./content'//content.jsexportdefault'acat'es6import的其他用法可以importanimalfrom'./content'animal的值可以根据自己的喜好改变,但是有一个问题就是如果导入函数或者变量,必须保持名字和content中的名字一致,可以参考import{say,type}from'./content'还有一种常见的写法import*ascontentfrom'./content'这种写法表示所有的输出值都在这个对象上