为什么要初始化css?
避免浏览器差异,解决兼容问题
网格布局
display: grid;
grid-template-columns: 1fr 1fr 1fr
less的优点
可以兼容,可以嵌套,循环,运算,定义变量和继承样式(extend)
computed和watch的区别;computed和methods的区别
computed和watch:
computed是计算缓存,需要return,第一次加载就监听
watch触发一次就执行一次回调,不需要return,可以设置immediate:true
computed和methods:
computed是响应式,调用值,引用的属性发生变化时才会计算
methods不是响应式,调用函数,每次被调用都要执行
vue列表中key的作用,以及能用index下标来标记吗
用来识别一个独立的元素,识别dom元素更准更快,优化diff算法,高效更新虚拟dom,区分同名元素
不能用i和index,因为不管数组顺序如何颠倒,index顺序都是0,1,2,3...从而可能会导致dom旧节点复用错误,做很多额外的工作或出现bug
谈谈对promise的理解
解决异步编程回调地狱(传统解决异步编程的方式是通过回调函数,而回调嵌套过多会导致回调地狱(callbackhell))的一种解决方案,可以通过Promise的方式以同步的方式表达出来,从而解决代码臃肿和可读性差的问题。
程序有三种状态:pending(等待)、resolved(成功)、rejected(失败)。
Promise 的实例可以看做是一个状态展示器,我们可以将拥有状态及改变状态的业务通过Promise来实现,然后再结合async function进一步提升程序的可读性及易维护性
像前端很多库都是基于Promise封装的,比如axios,antd等,所以理解并且能使用它是一名合格前端所必备的技能
一般Promise我都用来接受ajax请求结果之后的回调以及图片的预加载(Promise.all)
http请求方式
get,post,put,delete,head,options,trace,connect。可以说常用的只有前四个,其它的了解不多
常见http状态码
200,成功
301,临时跳转
302,永久性的重定向
304,请求成功,但是是从缓存中读取的,节省资源
403,请求的权限不够,或者该ip被封掉了
404,找不到请求的资源(最常见)
500,程序本身错误,也就是后端的问题,可以对他说,热烈的马
js是单线程吗
是的,单线程是指Js引擎执行Js时只分了一个线程给他执行,也就是执行js时是单线程的。
异步方法
回调函数,事件监听,发布订阅(双向绑定用到),Promise,async/await,ajax,定时器延时器,then,catch,finally
闭包使用场景
比如说回调函数,还有按钮的节流,频繁点击的时候,只要在规定的事件内检测到设置的flag还是没改变,则直接返回啥也不做,或设置按钮状态为disabled也可以
销毁生命周期一般做哪些业务
消除定时器,解绑事件,清除无用的变量常量等,以免造成内存溢出
vue中nextTick
在vue中,并不是数据一更新,DOM就立即更新,页面立即渲染,而是当一个事件循环结束后,DOM才会完成更新,页面才会成功渲染;
如通过一个for循环改变一个数据,即使这个for循环100次,DOM也只会在第100次时才更新,而不是循环100次,DOM就更新100次。
使用场景:初始化绑定或操作Dom,获取元素宽高等
vue自定义指令
Vue 自定义指令有全局注册和局部注册两种方式。
先来看看注册全局指令的方式,通过 Vue.directive( id, [definition] )方式注册全局指令。然后在入口文件中进行 Vue.use()调用
局部自定义指令是定义在组件内部的,只能在当前组件中使用,directives后是一个对象,对象里面key是指令名字,值是一个对象,这个对象里面有钩子函数update(更新),bind(只调用一次),inserted(插入父元素时),参数是el,binding,vnode,钩子函数里面书写逻辑
常用例子,系统权限显示按钮级:自定义一个权限数组,判断用户角色在不在这个数组内,在的话则显示,不在的话则移除该dom,使用的时候给v-自定义指令赋值判断即可
vue3和vue2的区别
双向绑定原理不同:vue2是object.defineProperty()对数据对象的setter,getter进行数据劫持,并且结合发布订阅模式完成双向绑定,vue3是通过proxy代理来处理数据,好处是可以监听整个对象和数组,不用闭包,for..in等内容来提高效率
生命周期不同:vue2生命周期为创建前后,挂载前后,更新前后,销毁前后,vue3则没有创建前后,用setup替代,生命周期前面多个on,且销毁生命周期前后由原来的destroyed改为onbeforeUnmounted和onUnmounted
vue3可以拥有多个根节点,vue2不行
vue2选项式,vue3组合式,不用划分不同的属性去写代码,比如data,methods等,直接书写即可,比较整洁和方便
定义数据,vue3多了两个钩子函数,ref和reactive
父子传值不同:vue2是props和$emit
vue3是defineProps和defineEmits
父子传值详细代码可以看这位博主的博客,写的挺详细 点击这里
16、hooks的理解
名为钩子,函数的一种写法,就是将文件的一些单独功能的js代码进行抽离出来,放到单独的js文件中,或者说是一些可以复用的公共方法/功能
17.如果用户跳过登陆页面,直接在地址栏输入地址跳转,路由是如何进行拦截的
一般的js网络请求库都会有拦截器(interceptor),可以针对所有的请求和响应进行预处理。如果用户正常登陆,前端会把session id(或者是一个token)保存在cookie中。之后的每一次ajax请求都会附上这个id或者token。之后,后端针对前端的每一次(需要验证用户登陆状态和是否有权限调用这个接口)请求,都会利用这个id进行检验。假如没有通过,就会返回http 401。所以你需要在针对响应(response)的预处理中进行判断,如果是401,就重定向到登陆页。
18.canvas有哪些方法和属性
getContext() 返回一个对象,提供了用于在画布上绘图的方法和属性
beginPath() 起始一条路径,或重置当前路径
closePath() 创建从当前点回到起始点的路径
lineTo() 添加一个新点,然后在画布中创建从该点到最后指定点的线条
rect() 创建矩形
arc() 创建弧/曲线
moveTo() 把路径移动到画布中的指定点,不创建线条
stroke() 绘制已定义的路径
19.vue中什么是单向数据流
指数据总是从父组件传递到子组件,子组件无权更改,否则会报错,首先如果更改了,那么其它依赖于该父组件的子组件也会出错,其次就是如果子组件更改了父组件的数据的话,那么父组件就不知道是哪个子组件更改了数据,从而出bug,正确的做法就是通知父组件要更改数据,然后父组件更改完数据之后再传递给子组件
20.组件的作用域
我们在定义组件时,作用域是组件本身,在调用组件时,作用域是父组件
21.权限判断
大概有两种,一种是登陆后获取用户权限信息,然后筛选有权限进入的路由,通过addRoutes动态添加路由,用到router.beforeEach(),另一种是初始化挂载全部路由,在路由上标记出所需的权限,最后在路由跳转(beforeRouteLeave)之前,验证用户有没有该权限
22.setup的执行时机
在beforeCreate之前执行一次
文章来源于网络侵删
原文链接:https://blog.csdn.net/m0_49207266/article/details/128983310