600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 面试时问到的问题

面试时问到的问题

时间:2023-06-30 11:12:00

相关推荐

面试时问到的问题

let 和 const 的相关问

let a = 3;const b = 4;console.log(a,b); //3,4a=4;console.log(a,b); //4,4let a = 4; const b = 5console.log(a,b); //报错

报错内容:'Identifier 'a' has already been declared',产生报错原因是重复声明。

对象取key

obj = {a:1,b:2,c:3}取出key值,组成一个数[a,b,c]

方法一:

for...in... 遍历

var arr = new Arrayfor(let key in obj){arr.push(key)}

方法二:

Object.keys()

Object.keys() 方法会返回一个key值的数组。

Object.keys(obj)console.log(Object.keys(obj))//['a','b','c']

Vue相关

1、vue路由跳转不刷新页面

运用用vue动态组件的的keep-alivekeep-alivehttps://shq5785./article/details/1093129422、父子组件传值

父子组件通信:

父向子传递数据是通过 props,子向父是通过 $emit;

通过 $parent / $children 通信;

$ref 也可以访问组件实例;provide / inject ;

兄弟组件通信: EventBus;Vuex;

跨级组件通信: EventBus;Vuex;provide / inject ;$attrs / $listeners;

3、v-if 和 v-show的区别

v-if:是控制dom节点是否存在来控制显隐的,适用于一次性判断是否存在;

v-show:通过设置dom元素的display属性来控制显隐的,适用于频繁切换的节点;

4、v-if 和 v-for为什么不能一起使用

v-for比v-if优先级高,使用的话,会先进行循环在进行判断,这样无论判断结果如何,循环都会执行下去。

5、vuex相关

①vuex有哪些属性都是干什么的

五种属性,分别是 State、 Getter、Mutation 、Action、 Module

state:数据源存放地,相当于vue对象中的data;

getter:获取根据业务场景处理返回的数据,计算属性;

mutation:唯一修改state的方法,修改过程是同步的;

action:异步处理,通过分发操作触发mutation;(注:action 提交的是 mutation,而不是直接变更状态)

module:模块化,可以让每一个模块拥有自己的state、mutation、action、getters。

②vuex页面刷新数据丢失问题如何解决

方法一:将vuex中的数据直接保存到浏览器缓存中,如:sessionStorage、localStorage、cookie(不安全,不适用大数据量的存储;)

方法二:在页面刷新的时候再次请求远程数据,使之动态更新vuex数据(适用于少量的数据,并且不会出现网络延迟;)

方法三:在父页面向后台请求远程数据,并且在页面刷新前将vuex的数据先保存至sessionStorage,以防请求数据量过大页面加载时拿不到返回的数据

6、vue的双向绑定原理是什么?关键点在什么地方?

简单回答就是采⽤数据劫持结合发布者-订阅者模式的⽅式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据发生变动时发布消息给订阅者,触发相应的监听回调。这样就可以实现数据的双向绑定

复杂点就是在数据渲染时使用prop渲染数据,将prop绑定到子组件自身的数据上,修改数据时更新自身数据来替代prop,watch子组件自身数据的改变,触发事件通知父组件更改绑定到prop的数据。

关键点就是:Object.defineProperty()劫持属性

数组求和

对于所有数组arr=[1,1,2,3,4,1,2,5],求元素加和

var arr = [1,1,2,3,4,1,2,5];// 方法一:循环function add(arr){var a=0;for(var i=0;i<arr.length;i++){a+=arr[i];}return a;}// 方法二:递归function add(arr){var len = arr.length;if(len == 0){return 0;} else if (len == 1){return arr[0];} else {return arr[0] + add(arr.slice(1));}}// 方法三:forEach遍历function add(arr) {let sum = 0;arr.forEach(val=>s +=val,0)return sum;}// 方法四:evalfunction add(arr) {return eval(arr.join(“+”));}// 方法五:map-reducefunction add(arr) {return arr.reduce((prev,curr)=>prev+curr)}

数组去重

对于数组arr=[1,1,2,3,4,1,2,5],取出唯一数组

var arr = [1,1,2,3,4,1,2,5];// 方法一:setArray.from(new set(arr));或function newArrFn (arr) {return ([...new Set(arr)])}// 方法二:filter()+indexoffunction fn(arr){let newArr = []arr.forEach((val)=>{if(newArr.indexOf(val) == -1){newArr.push(val)}})return newArr}function fn(arr) {return arr.filter((item, index, arr) => arr.indexOf(item) === index)}// 方法三:遍历var newArr = [];arr.forEach((key,index)=>{if(newArr.indexOf(key) === -1){newArr.push(key)}})// 方法四:new Mapconst m = new Map();for (let i = 0; i < arr.length; i++) {m.set(arr[i], arr[i]);}const newArr = []m.forEach(function (value, key) {newArr .push(value)})// 方法五:sort排序function newArrFn (arr) {arr = arr.sort();let newArr = [];for(let i = 0;i<arr.length;i++){arr[i] === arr[i-1] ? newArr : newArr.push(arr[i])};return newArr}

CSS垂直居中

方法一:使用line-height(行高)居中

方法二:absolute + transform

//父元素position: relative;//子元素position: absolute;top: 50%;left: 50%;transform: translate(-50% , -50%);

方法三:绝对定位

//父元素position: relative;//子元素position: absolute;top:0;left:0;right:0;bottom:0;margin:auto;

注:绝对定位是会脱离文档流的,这点要注意一下。

方法四:display:flex

给父元素设置display: flex,水平居中justify-content: center,垂直居中align-items: center

方法五:display:table-cell

// 父元素display: table;//子元素display: table-cell;vertical-align: middle;text-align: center;

常见的伪元素

before,after,first-letter,first-line

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。