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)是一种特殊的对象