ES6面试题
var、let、const区别
共同点:都是可以声明变量
区别:
1、var具有变量提升机制,let和const没有
2、var 声明的变量是函数作用域或全局作用域,而 const 和 let 声明的变量是块级作用域。
3、var可以多次声明同一个变量,let和const不可以
4、const 声明的变量必须进行初始化赋值,而 var 和 let 声明的变量可以不进行初始化赋值。
作用域考题
考题一:
Var没有自身的作用域,所以var n=1,打印是1
考题三:
将下列对象合并
方式一:Object.assign
方式二:
方式三:自己封装
箭头函数和普通函数的区别?
1、this指向的问题
箭头函数的this是在箭头函数定义时就决定的,而且是不可修改的(不可用call、apply、bind)
****箭头函数的this指向定义时候、外层第一个普通函数的this
2、箭头函数不能new(不能当作构造函数)
3、箭头函数没有prototype
4、箭头函数没有arguments对象
Promise是什么,它的API有哪些?
1、- Promise是es6新增的语法,用来处理异步请求,解决了es5中回调地狱的问题
2、- Promise的回调函数中接收两个参数,第一个表示请求成功的回调,第二个表示请求失败的回调,分别是resolve和reject。
3、- 使用.then()去获取结果,使用.catch()去捕获异常,并且上一个Promise的执行结果会返回一个Promise对象。
- Promise.all()和Promise.race()
使用场景:
有些时候我们做一个操作可能得同时需要不同的接口返回的数据,这时我们就可以使用Promise.all;
有时我们比如说有好几个服务器的好几个接口都提供同样的服务,我们不知道哪个接口更快,就可以使用Promise.race,哪个接口的数据先回来我们就用哪个接口的数据。
Promise有几种状态
有3种状态
4、pending(进行中)
5、fulfilled(已成功)
6、rejected(已失败)
async和await?区别?如何用?工作原理?
Async用来定义函数的,是一个异步函数,打印这个函数名会得到promise这个对象,(函数名称.then(函数名称调用then方法,就是promise调用then方法)
Await 后面加表达式,一般使用promise的表达式
工作原理:
Async执行成功会有返回值,内部调用promise.resolve()
- Promise是ES6中处理异步请求的语法,使用.then()来实现链式调用,使用.catch()来捕获异常。
- async/await 是对Promise的升级,
async用于声明一个函数是异步的,
await是等待一个异步方法执行完成(await一个Promise对象)
await = promise.then成功的情况。
async/await的捕获异常可以使用try/catch语法。(也可以使用.catch语法)
find和filter的区别,
find是查找符合的,返回第一个,
filter是筛选所有符合的
区别一:返回的内容不同
filter返回的是新数组
find返回的是具体内容
区别二:
Find匹配到第一个即返回
Filter:返回整体(每一个匹配都加入数组,返回这个数组)"
some和every的区别,
some判断是否有符合的,如果有一项就返回true,返回true或false
every判断数组里每一项是否都符合,全部匹配返回true,返回true或false
flat与flatMap使用
1、flat:数组的成员有时还是数组,Array.prototype.flat()用于将嵌套的数组"拉平",变成一维的数组。该方法返回一个新数组,对原数据没有影响。
javascript
[1, 2, [3, 4]].flat()
// [1, 2, 3, 4]
flat()默认只会"拉平"一层,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
如果原数组有空位,flat()方法会跳过空位
javascript
[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]
[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]
//如果原数组有空位,flat()方法会跳过空位。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]
2、flatMap()方法:对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()),然后对返回值组成的数组执行flat()方法。
该方法返回一个新数组,不改变原数组。
flatMap()只能展开一层数组。
javascript
// 相当于 [[[2]], [[4]], [[6]], [[8]]].flat()
[1, 2, 3, 4].flatMap(x => [[x * 2]])
// [[2], [4], [6], [8]]