1.v-show和v-if的区别

v-show是通过display控制元素的显示隐藏.v-if是真正的渲染和销毁.如果频繁切换用v-show.

2.v-show和keep-alive的区别

简单的用v-show,复杂的用keep-alive,如tab切换

3.v-for为什么用key

key是元素的唯一标识,可以减少渲染次数,提高性能

4.vue生命周期

beforecreate 还没有初始化data和methods

created data和methods已经创建完成

beforemount 还没有渲染

mounted 渲染完成,可以操作dom

beforeupdate data中的数据已经更新,页面数据还未更新

updated 页面重新渲染完成

beforedestroy 清除定时器

destroyed

5.多组件生命周期

挂载阶段(加载渲染过程):

父 beforeCreate --> 父 created --> 父 beforeMount --> 子 beforeCreate --> 子 created --> 子 beforeMount --> 子 mounted --> 父 mounted

更新阶段:

父 beforeUpdate --> 子 beforeUpdate --> 子 updated --> 父 updated

销毁阶段:

父 beforeDestroy --> 子 beforeDestroy --> 子 destroyed --> 父 destroyed

 6.vue组件间通讯

父传子:props $children ref

子传父:$emit $parent

兄弟组件间传值:vuex eventbus

7.computed和watch

computed有缓存,不支持异步

watch支持异步

8.为什么data返回必须是一个函数?

防止组件复用时数据相互影响

9.vuex中action和mutation的区别?

action可以处理异步,mutation不能

10.vue-router的常用路由模式?

hash模式:带#

history模式

11.性能优化

v-show和v-if

合理使用computed

避免v-if和v-for同时使用

12.vuex

state,getters,mutation,action,module

13.JS数据类型,如何判断

number,string,boolean,null,undefined,object,symbol

typeof,instance of,object.prototype.toString.call

14.this指向

普通函数this指向调用者

全局范围this指向window

构造函数this指向new出来的对象

箭头函数this指向定义时的this

15.vue双向绑定原理

object.defineproperty()的set get方法来劫持data里的数据,通过发布订阅者模式实现动态渲染