1.说一下对promise的理解?
1.1 什么是promise?通过promise能解决什么问题?
promise是es6提供的一种异步解决方案,通过promise能够解决回调地域问题,所谓回调地域指的是当我们执行完一个操作之后再接收操作的结果只能通过回调函数的方式进行接收,回调函数的弊端就是写法臃肿,后期难以维护,所以es6提供了promise来解决。promise可以通过链式调用的方法来解决层层嵌套问题,但是写法不好,所以最终的代替方案是使用async和await
1.2 promise的特点是什么?也就是三种状态?
promise一共有三个状态,分别是进行中,成功或者失败,如果成功的话通过resolve方法将正确结果返回出去,通过.then的方式接收,失败的话通过reject的方式将错误结果返回出去,通过.catch的方式接收,pending状态是进行中,一旦进行,状态就是不可逆的
1.3 说一下promise怎么用?
如果要使用promise,需要对promise进行实例化,在实例化的构造函数里面有一个回调函数,这个回调函数里面有那个参数,分别是resolve和reject,可以通过promise的实例化对象调用.then或者.catch方式接收结果
1.4 说一下promise的all方法和race方法?
promise还给我们提供了.all和.race,其中all方法的作用是将多个请求合并成一个请求,比如当首页需要请求10个接口,我们可以promise.all进行合并,.race的作用也可以将多个请求合并,不过是谁先请求成功就返回谁
1.5 在项目中用promise做过什么?
在项目中经常使用promise对api进行封装以及如何a页面要获取b页面的数据,也可以通过promise来完成
2.说一下async和await以及他们和promise的区别?
async和await是解决异步的终极方案,他是generatal的语法糖,async和await一般配合使用,当我们给函数前面加上关键字async,这个函数返回的值就是一个promise,而await是一个同步的操作,await只能配合async,不然会报错,await后面可以是表达式,也可以是一个promise,在await下面的代码必须等待await执行完之后才能执行
和promise的区别就是写法更加简洁
3.说一下es6新增的特性有哪些?
新增了变量声明方式也就是let和const
新增了解构赋值
新增了一个数组方法,字符串方法,正则表达的方法,函数的一些写法,对象的方法
新增了promise
新增了async和await
新增了class以及继承
新增了模块化
新增了新的数据类型
在项目中我也经常使用let和cosnt箭头函数以及解构赋值还有async和await
4.说一下新增的数组方法有哪些?分别是什么意思?
Array.from 将类数组转化为真正的数组
Array.of 将数值转化为数组
copy.Within()是将指定位置的成员复制到其他位置
find方盒和findindex方法 查找符合条件的元素和查找符合条件元素的下标
includes方法 可以查看各个数组是否包含给定的值
flat方法将多维数组转化为一维数组或者指定维度的数组
遍历数组的方法:
forEach类似于for循环 主要用来遍历数组
map方法 作用是映射一个新数组,可以对数组进行遍历
filter方法 作用是返回一个符合条件新的数据,也有遍历数组的作用
5.说一下map,forEach,filter方法的作用以及区别
forEach 方法:循环原来的数组
map 方法:循环原数组并映射一个新的数组出来
filter方法:过滤不需要的数组元素
6.说一下var,let,const之间的区别
var存在提升,我们能在声明之前使用。let,const因为暂时性死去的原因,不能在声明前使用
var在全局作用域下声明遍历会导致变量挂载在window上,其他两者不会
let和const作用基本一致,但是后者声明的变量不能再次赋值
7.说一下箭头函数与普通函数的区别?
在es6中提供了一种简捷的函数写法,我们叫做 箭头函数
写法:函数名=(形参)=>{....} 当函数体中只有一个表达式时,{}和return可以省略,当函数体中形参只有一个时,()可以省略
特点:箭头函数中的this始终指向箭头函数定义时离this最近的一个函数,如果没有最近的函数,则会指向window
区别:
箭头函数不能用于构造函数,不能使用new,而普通函数可以
在普通函数中,this总是指向调用他的对象,如果用作构造函数,this指向创建的对象实例,而箭头函数指向箭头定义时离this最近的一个函数,如果没有就指向window
8.说一下for in与for of的区别?
for in可以遍历对象,而for of遍历对象会报错
for in遍历数组得到数组的下标,而for of遍历会得到数组里的每一个元素
9.说一下es6如何实现类以及实现类的继承?
es6提供了类这个概念,在es5中没有这个概念,想在es5中实现一个类型,我们只能构造函数的方式去创建一个类,而es6给我们提供一个更方便的方法,就是class,class可以理解为是构造函数的语法糖
我们创建一个类只需要用过关键词class去声明就可以了,他的调用方式和构造函数的调用方式是一样的
通过es6的类还会给我们提供一个extends这样的一个关键字,来实现继承
10.说一下数组去重方法有哪些?es6如何实现去重?
indexof 双层for循环 set方法
11. 说一下如何检测对象里面有没有属性(或者如何检测一个对象是否为空)?以及如何获取对象里面所有的属性名?
Object.hasOwnProperty()
使用for in
通过object.keys方法,返回值是一个数组,里面包含了所有的属性名
12.如何将多个数组合并成一个数组?
es5:
concat
for循环
es6:
扩展运算符
map方法
13.说一下forEach、map、filter、reduce、some、every等方法的作用?
reduce:遍历数组求和
some:遍历数组每一项,有一项返回true就停止遍历,结果返回true,不改变原数组
遍历数组每一项,每一项返回true,则返回最终结果为true,当任何返回false时,停止遍历,返回false,不改变原数组
forEach:循环原来的数组
map:循环原数组映射出一个新数组
filter:过滤不需要的数组元素