前端面试题

面试题(主要Vue)

1.双向数据绑定v-model的实现原理

v-model可以实现表单与数据之间的双向绑定,即修改表单的值,而它的实现原理就是:原生dom当中是有oninput事件的,当表单元素文本内容改变时就会出现一次回调,vue2:是通过value和input来实现v-model

总结就是以下三点:

​ 1.input元素的value=this.name

​ 2.绑定Input事件this.name=$event.target.value

​ 3.data更新触发re-render

2.对MVVM的理解

2.1介绍MVVM

​ mvvm全称是model-view-viewmodel,是M-V-VM三部分组成,对于我们前端而言,我们是基于视图UI开发,mvvm就是将view的状态和行为抽象化,其中的viewModel将视图ui和业务逻辑分开。

2.2从vue角度看mvvm

在这里插入图片描述

图片来自理解mvc和mvvm

3.computed有何特点

computed是vue的计算属性,根据依赖关系进行缓存的计算,只有当依赖关系发生改变时才会进行更新。

computed的每一个计算属性都会被缓存起来

提高性能

4.为何组件data必须是一个函数?

​ 根本上,export default看似是一个对象,实际上这个组件是一个class类,每次使用这个组件就是对class的一个实例化,多个实例化对data进行使用,所有的实例的data就会共享数据,也就是说,假如我在A中使用了这个实例,并且改变了data的值,那么B中的data是不是也会发生改变,这就是data为什么必须是一个函数。

​ 然后总结下回答面试官时该怎么说:

  1. 在Vue中实例的data可以是对象或者函数,但是组件中的data必须是一个函数,组件是可以服用的Vue实例,把公共部分的模块抽离出来,达到复用和直接使用的效果
  2. 如果data是一个对象,对象是一个引用类型,在堆空间内开辟一个区域,将内存存入,那么所有的组件公用此空间,也就是公用此data,当data改变时,其他组件中的data也会跟着发生改变
  3. 如果data是一个函数,使用return来返回一个对象,这样每一个组件就会返回一个值,各不干扰,达到组件的复用功能

5.ajax请求应该放到哪个生命周期

  • 放在mounted中
  • JS是单线程的,ajax异步获取数据
  • 放在Mounted之前没有用,只会让逻辑更混乱

有人会问,为什么不能放在created中,这不跟mounted差不多吗,其实理论上确实差不多,但是请求在created中时,视图的dom没有被渲染出来,拿不到真实dom,此时还只是虚拟dom。而在mounted中dom已经渲染出来了,可以直接操作dom

PS:在服务端不支持Mounted,所以服务端渲染一般用created

6.数组的一些API,哪些能改变原数组,哪些不能

改变原数组的

shift() //把数组的第一个元素删除
unshift()//把数组的最后一个元素删除
pop()//数组最后一个删除,并且返回该元素
push()//将一个值加入到数组的最尾部
reverse()//反转数据元素
sort()//默认按照升序排列数组
splice()//数据的删除,替换,查找

不改变原数组的

concat()//连接两个数组
every()//检测数组中所以元素是否满足条件
filter()//创建一个新数组
forEach()//遍历数组
indexOf()//查找数组中是否有这个元素,有就返回索引,没有就返回-1
join()//将数组转换成字符串
lastIndexOf() //从尾部来判断数组中元素的索引
map() //返回一个新数组,允许以键值对的形式存储
some() //判断数组中至少粗壮乃一个元素满足指定条件
slice()//开始索引,截取个数,截取数组
reduce() //对数组中每个元素执行一个由你提供的reduce函数
reduceRight()//同下
flat()//没用过
flatMap()//同上
find()//返回通过测试数组的第一个元素的值

7.for和forEach的区别

  1. for循环可以使用break跳出循环,但forEach不能。
  2. for循环可以控制循环起点(i初始化的数字决定循环的起点),forEach只能默认从索引0开始。
  3. for循环过程中支持修改索引(修改 i),但forEach做不到(底层控制index自增,无法左右它)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值