、ES6⾯试题
(扩展☺)1.什么是 es6?
是 ECMAScript 的第六个版本 在 es5 的基础上新增加了一些语法js 分成三部分 dom(文档对象模型) bom(浏览器对象模型) ECMAScript(js 语法)
(扩展☺) 2.promise?
promise 是 es6 提供的一种异步解决方案,在我的理解中 promise 就是把异步操作换了一种写法
从之前的嵌套回调函数 变成了链式的写法
promise 本身其实就是一个容器 里面放异步的代码 这样就可以让这个异步的代码执行.then .catch 的操作
(1)3.1 说⼀下你对promise的理解?
promise 是 es6 提供的一种异步解决方案,在我的理解中 promise 就是把异步操作换了一种写法
从之前的嵌套回调函数 变成了链式的写法
(2) 3.1.1 什么是promise?通过promise能够解决什么问题?
promise 是 es6 提供的一种异步解决方案,
promise 可以解决回调地狱的问题
回调地狱就是拿到 a 接口的数据后才能根据 a 返回的数据请求 b 接口
这样回调函数嵌套回调函数的写法就叫回调地狱
这种写法会让代码臃肿 并且后期难以维护
除了 promise 之外 async 是解决回调地狱的最终方案
(3) 3.1.2 说⼀下promise的特点?也就是三种状态?
promise ⼀共有三个状态,分别是进⾏中,成功或者失败 如何成功的话可以通过 resolve ⽅法将正确结
果返回出去,通过.then 的⽅式进⾏接受,失败的话可以通过 reject 的⽅式将失败的结果返回出去,通 过.catch 的⽅式进⾏接受,pending 状态是进⾏中,⼀旦进⾏之后,他的状态是不可逆的
(4)3.1.3 说⼀下promise怎么⽤?
如果要使⽤ promise,我们需要对 promise 进⾏实例化,在实例化的构造函数⾥⾯有⼀个回调函数,这个
回调函数⾥⾯有两个参数,分别是 resolve 和 reject,我们可以通过 promise 的实例化对象调⽤.then 或 者.catch ⽅式接受结果
(扩展(●—●)) 1.5 我们之前遇到的哪些东西本身就是一个 promise 对象?
jq 的 ajax 请求本身就是一个 promise 对象 所以可以直接用.then
axios 也是一个 promise 对象
原生的 ajax 以及 小程序的 wx.request 请求都不是 promise 对象 不能用。then 的写法,如果想用链式写法 就要自己封装一个 promise
(5)3.1.4 在说⼀下promise的all⽅法和race⽅法?
promise还给我们提供了.all 和 race, 其中all⽅法的作⽤是将多个请求合并成⼀个请求, ⽐如当⾸⻚要请求10个接⼝,我们可以promise.all进⾏合并,.race的作⽤也可以将多个请求合并成⼀个请求,不过
是谁先请求成功就先返回谁.
(6) 3.1.5 在说⼀下在项⽬中使⽤promise做过什么?
我在项⽬中经常使⽤promise对api 截形封装以及如何a⻚⾯要获取到b⻚⾯的结果,我们也可以结果
promise来完成
(7)3.2 说⼀下async和await、以及他们和promise的区别?
⾸先 async 和 await 是解决异步的终极⽅案,async 和 await ⼀般配和使⽤,当我们给函数前⾯加上关键字 async,这个时候,这个函数的返回值就是⼀个 promise. ⽽ await 是⼀个同步
的操作,await 只能配合 async 只能,不然会报错,await 后⾯可以是表达式,也可以是⼀个 promise,在await 下⾯的代码必须得等待 await 执⾏完之后才能在执⾏他们和 promise 的区别就是在写法上更加的简洁.
(扩展☺)4.generator 函数?
generator 函数也是 es6 的处理异步回调的一种写法 但是这种写法现在被 async 取代了generator 函数 用*表示 跟 yield 搭配使用
(扩展☺)5.promise 的 all 和 race 方法?
promise 还给我们提供了.all 和 race, 其中 all ⽅法的作⽤是将多个请求合并成⼀个请求, ⽐如当⾸⻚要请求 10 个接⼝,我们可以 promise.all 进⾏合并,.race 的作⽤也可以将多个请求合并成⼀个请求,不过
是谁先请求成功就先返回谁.
(8)3.3 说⼀下es6新增的特性有那些?
- 新增了变量声明⽅式,也就是let和const
- 新增了解构赋值
- 新增了⼀个数组⽅法 字符串⽅法 正则表达的⽅法 函数的⼀些写法 对象的⽅法
- promise
- async await
- class 以及 继承
- 模块化
- 新的数据类型
- ⼤概能想到暂时只有这么多,在项⽬中我经常使⽤let和const 箭头函数。解构赋值 promise 还 有 async await
(9) 3.4 说⼀下数组新增的⽅法有哪些?这些⽅法分别是什么意思?
Array.from⽅法 将类数组转化为真正的数组
Array.of⽅法 将数值转化为数组
copyWithin() ⽅法是将指定位置的成员复制到其他位置(会覆盖原有成员)
find⽅法和findindex⽅法 查找符合条件的元素。 查找符合条件元素的下表
includes⽅法可以查看表个数组是否包含给定的值
flat⽅法将多维数组转化为1维数组或者指定维度的数组
遍历的数组的⽅法:
forEach 类似于for循环,主要是⽤来遍历数组
map⽅法 主要作⽤是映射⼀个新的数组,可以对数组进⾏遍历
filter⽅法 主要作⽤返回⼀个符合条件新的数据,同样也有遍历数组的作⽤
(10) 3.5 说⼀下map⽅法、forEach⽅法、filter⽅法的作⽤以及他们之间的区别?
forEach() ⽅法: 循环原来的数组
map() ⽅法: 循环原数组并映射⼀个新数组出来
filter() ⽅法: 过滤不需要的数组元素
(11)3.6 说⼀下var 、let、const之间的区别?
- let var 是声明变量的 const 是声明常量的
- var 声明的变量会声明提升 但是 const 和 let 不会 (声明提升就是声明的变量会把声明语句提到作用域的顶端 但是赋值语句留在原地)
- var 在全局作⽤域下声明变量会导致变量挂载在 window 上,其他两者不会
- let 和 const 声明的是块级作用域 var 声明的是函数作用域
块级作用域:只要是大括号就能区分作用域
函数作用域: 只有函数才能区分作用域