2020-11-02 | 面试合集 | UNLOCK | 更新时间:2020-11-2 16:59

前端面试题的收集和总结(Es6 篇)

ES6新增加了哪些新的东西?

ES6是ECMAScript2016的一个简称,也泛指ES5以后的版本,ES6新增的特性有 let const …(扩展运算符) ?.(可选链式操作) ; set map ; Symbol; Promise Generator async ;iterator for of ; class module ; proxy

set map 的区别?

set和map都是Es6新增的数据结构,Set类似于数组,但是成员的值都是唯一的,没有重复的值。Set的属性方法有 size() add() delete() clear();map是键值对的结构的补充,之前键仅限于字符串。而map数据结构则可以是各种类型的值。map的属性方法有 set() get() has() delete() clear();

关于循环结构有哪些循环方法?

普通for循环;for in循环;for of循环(ES6新增) forEach() map() filter some reducer

for(var i=1;i<arr.length;i++){  }  //for循环,可以用来循环数组,iterator如set map

for(let i in arr){ console.log(arr[i]) } //for in循环,可以用来循环数组,iterator ,对象

for(let i of arr){ console.log(i) } //for of循环,可以循环iterator如set map

arr.forEach((i)=> cosole.log(i) )   //forEach循环,可以循环数组(会修改原数组)

arr.map((i)=> console.log(i) )      //map循环,可以循环数组,(不会修改原数组,return 新数组)

怎么交换相等长度的两个数组?

通过结构赋值的变量交换可以实现,也可以声明一个额外的变量进行置换

let a=[1],b=[2];  [a,b]=[b,a];

Promise的三个状态是哪几个?

promise是一个用于异步编程的一个解决方案,它的状态有 pending(进行中) fulfilled(已成功) rejected(已失败);它有两个状态变化,一个是从pending到fulfilled,一个是从pending到rejected,一旦状态改变就不会在变

怎么实现多个请求都成功后再处理回调?

Promise.all([]) 传递数组再赋值给一个变量,数组里都是promise实例,在数组里的promise,必须全部成功,状态才会变为fullfilled,只要有一个失败,则就算变为rejected,
Promise.allSettled() 传递数组再赋值给一个变量,数组里都是promise实例,只要数组里的promise都有有返回,等所有异步都确定后会返回一个fullfilled状态的promise对象,且有各promise的状态

怎么实现多个请求,只要成功一个就可以处理回调?

可以通过Promise.rect() 方法实现,和.all()方法类似,都是往里面传递一个promise 实例数组,只要数组里有一个状态发送改变,那最外层的promise 就会接受到这个变化并且回调。

实现的依次分段执行

Generator 是一个异步编程的解决方案,可以用于解决分段执行的方案;在声明函数的时候,在 function* 上添加星号,在函数内部通过 yield 来定义不同的内部状态;再通过next() 方法依次调用,直到 Generator 的 done 状态变为 true

简单介绍一下 Async

Async 可以看做为 Generator 的语法糖; await后可以跟Promise或其他异步操作,只有异步操作执行才会继续执行;而且Async 会返回Promise 对象;Promise对象只有在async体内的异步操作都完成后才会改变状态,除非return 或者体内抛出异常