高频面试题

2023-03-22  本文已影响0人  cyokin0324

1.js中的类数组有哪些,如何转换为真数组?

类数组:nodeList HTMLCollection arguments
转换:扩展运算符,Array.from(),Array.prototype.slice.apply()

2.封装一个dialog组件

3.npm run dev流程

在npm run dev的时候,首先会去项目的package.json文件里找scripts 里找对应的 dev ,然后执行 dev 的命令。

4.vue 加载流程

5.垂直水平居中的方式

第一种:定位+transform

.work {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
}

第二种:使用绝对定位 + margin: auto,给子元素添加如下样式

.work2 {
      position: absolute;
      top: 0;
      bottom: 0;
      right: 0;
      left: 0;
      margin:auto;
}

第三种:弹性盒子

.par-work {
    height: 100vh;
    display:flex;
    justify-content:center;
    align-items:center;
}

第四种:grid布局

.par-work3 {
    display: grid;
    height: 500px;
}
.son-work3 {
    align-self: center; /*设置单元格内容的垂直位置*/
    justify-self: center; /*设置单元格内容的水平位置*/
}

6.JS中的this指向

普通函数:关于this,谁调用就指向谁,没有调用者,就指向全局对象window。
箭头函数:箭头函数的this指向于函数作用域所用的对象。
如果单独使用,this 表示全局对象。
在事件中,this 表示接收事件的元素。
构造函数中,this指向实例。

7.let const var区别

let const 不能重复声明,不存在变量提升,存在暂时性死区,块级作用域,var声明的变量挂载在window上。

8.vue双向数据绑定原理

vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。

9.vue组件传值的方式

父->子 自定义属性
子->父 自定义方法
vuex
provide inject
$ref
$parent
$children

10.什么是虚拟DOM

虚拟DOM本质就是用树型结构的JS对象来描述真实的DOM结构的信息,这个树结构的JS对象包含了整个DOM结构的信息.

11.列表渲染中key的作用

在渲染成新的真实dom前,会执行diff算法,将新的虚拟dom和旧的虚拟dom,根据key来进行对比

12.apply call bind的区别

call和apply是改变后页面加载之后就立即执行,是同步代码。
call和bind的参数逐一传入,apply的参数放在数组中。
bind是异步代码,改变后不会立即执行;而是返回一个新的函数。

13.promise的三个状态

pending reject resolve

14.父子组件的生命周期执行顺序

父beforeCreate->父created->->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父beforeMount->父mounted
销毁阶段
父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

15.箭头函数和普通函数的区别

16.判断数据类型的方法

1.typeof
缺点:用typeof检测构造函数创建的Number,String,Boolean都返回object,检测数组和对象也都返回object
2.instranceof
缺点:Number,String,Boolean字面量方式的数据无法使用instanceof准确判断
例如:

let str="abc"
console.log(str instanceof String) //false

3.constructor
缺点:如果输出一个类型的实例的constructor返回不可见的底层代码
4.Object.prototype.toString.call()

var toString = Object.prototype.toString;
toString.call(123); //"[object Number]"

17.移动端设置0.5像素的边框

伪类结合transform:scale(0.5)

 .box::after {
             content: '';
              position: absolute;
              top: 0;
              left: 0;
              width: 200%;
              height: 200%;
              border-radius: 8px;
              border: 1px solid royalblue;
              transform: scale(0.5);
              transform-origin: 0 0;
              pointer-events: none;
         }

18.性能优化

1.体积优化
静态资源(图片,字体,图标等)压缩,JS、CSS压缩,TreeShaking去除多余代码,第三方库按需引入
2.传输优化
路由懒加载,gzip压缩,缩小TCP传输时js、css文件的体积,cdn托管
3.用户体验优化
设置加载动画,骨架屏等视觉等待效果,图片懒加载

19.vuex持久化存储

使用persistedState插件或存储到本地存储中

20.Object.freeze()函数的作用

Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

21.keep-alive的作用

在开发中经常有从列表跳到详情页,然后返回详情页的时候需要缓存列表页的原来数据以及滚动位置,这个时候就需要保存状态,要缓存状态。

22.computed和watch的区别

computed支持缓存,相依赖的数据发生改变才会重新计算;watch不支持缓存,只要监听的数据变化就会触发相应操作
computed不支持异步,当computed内有异步操作时是无法监听数据变化的;watch支持异步操作
computed属性的属性值是一函数,函数返回值为属性的属性值,computed中每个属性都可以设置set与get方法。watch监听的数据必须是data中声明过或父组件传递过来的props中的数据,当数据变化时,触发监听器

23.$route和$router的区别

$router是用来操作路由,$route是用来获取路由信息

24.vue中的插槽

25.首屏加载慢如何解决

26.JS垃圾回收机制

引用计数和标记清除

27.前端常用设计模式

28.new关键字的作用

29.数组方法有哪些?哪些能改变原数组

30.节流防抖

31.事件循环机制

32.前端跨域

33.深拷贝,浅拷贝

上一篇 下一篇

猜你喜欢

热点阅读