2023前端面试题总结(三)

77 阅读3分钟

一、keep-alive是什么?有哪几个生命周期阶段?

概念: 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们 当组件在内被切换,它的activated和 deactivated 这两个生命周期钩子函数将会被对应的执行。

1、keep-alive 的属性有哪些?

include 属性,可以是字符串或者正则表达式。只有名称匹配的组件会被缓存

exclude - 字符串或者正则表达式。任何名称匹配的组件都不会被缓存

max - 数字。表示最多可以缓存多少组件实例。

生命周期: activated:页面第一次进入的时候,钩子触发的顺序是 created -> mounted -> activated -> deactivated

页面退出的时候触发deactivated,当再次前进或者后退的时候只出触发activated。

二、对象常用的方法及适用场景

1keys() 
用于object:可以将一个对象作为参数,然后把这个对象[key,value]对中的key 值以数组的形式遍历出来。
故:keys() 方法是便利对象的key, value()方法是遍历对象的value

用例:将对象1中和对象2相同的key 值对象的value,赋值给对象2

````
object.keys(obj1).forEach(key => { obj2[key] = obj1[key] })

````

2assign()

此方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象

语法:Object.assign(target,...sources)

注意:如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。

3values()

Obejct.values() 方法可以将一个对象作为参数,然后把对象的value以数组的形式遍历出来。

语法:Object.values(obj)

三、创建一个空数组/空对象有哪些方式?

创建空数组
 
1、利用数组字面量

var arr = []

利用Array() 函数

var arr = new Array('值列表')

2、创建一个空对象

var obj = {}  字面量法

var obj1 = new Object()  通过new Object来创建对象

通过构造函数创建对象 function Person () {} 

四、哪些遍历方式会改变原数组?

1reverse() 2sort()  3forEach()

五、Set和Map各是什么?

参考:https://www.php.cn/website-design-ask-490948.html



五、介绍一下promise

答:promise 是解决异步问题的一种解决方案(但是它本身不是异步的),它本质上是一个对象,用于获取异步的一些消息。

promise的三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。

promise 具有then 方法,then 方法返回的是promise 实例,then 方法后可以再接then方法

catch 方法,用于promise 发生错误时的回调

finally 方法指不管promise最后状态如何,finally方法都会回调。

all 方法 用于将多个promise 实例包装成一个新的promise实例
此方法中,只有多个promise实例状态全部变为fulfilled 则包装的实例才会变成fulfilled
假如:被包装的三个promise之中的有一个被rejected,则包装实例就会变味rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

race 方法 同样是将多个promise实例,包装成一个promise实例,只要其中一个率先改变状态,p的状态就跟着改变,那个率先改变的promise实例的返回值,就会传递给p的回调函数。
解决问题:同时发起几个异步请求,谁先有结果就拿谁的
resolve 方法,是将现有对象转换为promise

reject 方法 会返回一个新的promise实例,该实例的状态为rejected

any 方法表示是有参数实例全部变为fulfilled状态,包装实例就会变为fulfilled状态;如果所有参数实例都变成rejected状态,则包装实例就会变成rejected状态。

(1)链式回调 promise.then()

(2)同时发起几个异步请求,谁先有结果就拿谁的 promise.face()
(3)发起多个请求,等到所有请求后再做下一步处理 这三种方式promise是怎么处理的? promise.all()