一些面试会问到的奇怪问题与面试总结

1.v-for、v-if先后顺序。

官方不建议一起使用,但是有时候面试的时候会问到。

在vue2中是v-for先与v-if的。

源码js编译结果:

_c()就是vm.$createElement(),意思是创建一个虚拟的element,就是返回值是VNode。

_l就是renderlist函数,第2个参数是一个回调函数,里面会传入的item。

先走v-for的逻辑,再根据v-if的条件去判断是否渲染li这个元素,如果没命中v-if的条件,则渲染一个注释节点。

但是在vue3中优化了这里,先判断后循环,性能会更好。

相当于:

性能明显较vue2有了提升

2.forEach跳出循环

很明显这个方法就是跳不出的,但是面试的时候会挖坑问你能不能跳,明确的说:不能!!

旁门左道1:循环到指定节点后splice()把剩余的项删除,或者让数组的length=0

旁门左道2:到指定节点后抛出错误,终止循环。

其实如果是数据量大的话更推荐使用some。

以下是cdn中对some的介绍:

 3.forEach与map的区别

说到forEach了讲一下它与map的区别。

网上很多都说forEach会改变原数组,而map不会,实际上这样是不准确的

我们先看一下cdn对这两个方法的解释

 简单来说就是forEach 忽略函数的返回值,而 map 则将函数的返回值收集到一个新的数组中。

map和forEach会不会改变原数组

这需要看我们面对的数据类型是基础数据类型还是引用类型。

这是因为引用类型的元素实际上存储的是引用(内存地址),而非值本身。因此,通过引用可以访问和修改原始数组中的元素。

number,string,Boolean,null,undefined它们在栈内存中直接存储变量与值。

所以如果数据类型是基本数据类型时,forEach也是不改变原数组的,因为它们在栈内存中直接存储变量与值。

注:

基本数据类型:字符串(String)、数字(Number)、布尔(Boolean)、、空值(Null)、未定义(Undefined)、symbol

引用数据类型:对象(Object),其中数组(Array)、函数(function)是一种特殊的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值