一、目录
js 中一个 = 、、 = 的区别 ?.. es6 语法中将两个对象合并成一个对象,使用什么语法?… let、const、var 有什么区别?… jquery 中如何获取当前元素下一个同级元素?… JS 中的深拷贝与浅拷贝的区别?… 如何在 JS 中编码和解码 URL… 请描述一下 cookie,sessionStorage 和 localStorage 的区别… 什么是 MVVM?… 你知道 vue2.0 兼容 IE 哪个版本以上吗?… v-show 和 v-if 的区别?.. 组件之间怎么进行传值?.. 路由的两种跳转方式… 为什么避免 v-if 和 v-for 一起用?… computed 和 watch 有什么区别?.. vue 组件的 scoped 属性的作用… Vue 组件中 data 为什么必须是函数… route 和 router 的区别是什么?… 为什么需要 nextTick?.. 请详细说下你对 vue 生命周期的理解… Vue2.0 中为什么会出现 vue 修改数据后页面没有刷新这个问题?… 动态给 vue 的 data 添加一个新的属性时会发生什么?怎样解决… vue 怎么获取 DOM 节点?… 分析下 vue 项目本地开发完成后部署到服务器后报 404 是什么原因呢?. vue 能监听到数组变化的方法有哪些?为什么这些方法能监听到呢?… 怎么将 axios 异步请求同步化处理?…
二、答案
js 中一个 = 、、 = 的区别 ? = 赋值 === 严格判断,值和类型都相等返回 true == 抽象相等,比较时会先转换类型在作值得比较,只要值相等返回 true es6 语法中将两个对象合并成一个对象,使用什么语法? Object.assign() let、const、var 有什么区别? const 定义的变量不可以修改,而且必须初始化。 var 定义的变量可以修改,如果不初始化会输出 undefined,不会报错(存在变量提升现象) let 是块级作用域,函数内部使用 let 定义后,对函数外部无影响(不存在变量提升) jquery 中如何获取当前元素下一个同级元素? $(当前元素).next() JS 中的深拷贝与浅拷贝的区别? 深拷贝递归地复制新对象中的所有值或属性,而拷贝只复制引用。 在深拷贝中,新对象中的更改不会影响原始对象,而在浅拷贝中,新对象中的更改,原始对象中也会 跟着改。 在深拷贝中,原始对象不与新对象共享相同的属性,而在浅拷贝中,它们具有相同的属性。 6.如何在 JS 中编码和解码 URL encodeURI() 函数用于在 JS 中对 URL 进行编码。它将 url 字符串作为参数并返回编码的字符串 注意: encodeURI()不会编码类似这样字符: / ? : @ & = + $ #,如果需要编码这些字符,请使用 encodeURIComponent() 节码需要 decodeURIComponent() decodeURI() 函数用于解码 js 中的 URL。它将编码的 url 字符串作为参数并返回已解码的字符串 7.请描述一下 cookie,sessionStorage 和 localStorage 的区别 相同点:都存储在客户端 不同点: (1).存储大小 cookie 数据大小不能超过 4k。 sessionStorage 和 localStorage 虽然也有存储大小的限制,但比 cookie 大得多,可以达到 5M 或更大。 (2).有效时间 localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据; sessionStorage 数据在当前浏览器窗口关闭后自动删除。 cookie 设置的 cookie 过期时间之前一直有效,即使窗口或浏览器关闭 (3). 数据与服务器之间的交互方式 cookie 的数据会自动的传递到服务器,服务器端也可以写 cookie 到客户端 sessionStorage 和 localStorage 不会自动把数据发给服务器,仅在本地保存 8.什么是 MVVM? MVVM 是 Model-View-ViewModel 的缩写。MVVM 是一种设计思想。Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑;View 代表 UI 组件,它负责将数据模型转化成 UI 展现出来, ViewModel 是一个同步 View 和 Model 的对象。 在 MVVM 架构下,View 和 Model 之间并没有直接的联系,而是通过 ViewModel 进行交互,Model 和 ViewModel 之间的交互是双向的, 因此 View 数据的变化会同步到 Model 中,而 Model 数据的变化也会 立即反应到 View 上。 ViewModel 通过双向数据绑定把 View 层和 Model 层连接起来,而 View 和 Model 之间的同步工作 完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作 DOM, 不需要关注数据状 态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。 9.你知道 vue2.0 兼容 IE 哪个版本以上吗? 不兼容 IE8 及以下的 因为 vue 的响应式原理是基于 es5 的 Object.defineProperty 的,而这个方法不支持 ie8 及以下的 v-show 和 v-if 的区别? v-show 是 CSS 切换,v-if 是完整的销毁和重新创建(使用频繁切换时使用 v-show,运行时较少改变使用 v-if) v-show 仅仅控制元素的显示方式,将 display 属性在 block 和 none 中来回切换;而 v-if 会控制这个 DOM 节点的存在与否。当我们需要经常切换某个元素的显示/隐藏时,使用 v-show 更能节省性能上的开销;当只 需要一次显示/隐藏时,使用 v-if 更合理 组件之间怎么进行传值? 父组件通过标签上:data=data 方式定义传值 子组件通过 props 方法接受数据 子组件通过$emit 方法传递参数 路由的两种跳转方式
< router- link to= 'home' > router- link 标签会渲染为< a> 标签,咋填 template 中的跳转都是这
种;
另一种是编程是导航 也就是通过 js 跳转 比如 router. push ( '/home' )
为什么避免 v-if 和 v-for 一起用? 当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级,通过 v-if 移动到容器元素,不会再重复遍历列表中 的每个值。取而代之的是,只检查它一次,且不会在 v-if 为否的时候运算 v-for。 computed 和 watch 有什么区别? computed 是计算属性,也就是计算值,它更多用于计算值的场景 computed 具有缓存性,computed 的值在 getter 执行后是会缓存的,只有在它依赖的属性值改变之后, 下一次获取 computed 的值时重新调用对应的 getter 来计算 computed 适用于计算比较消耗性能的计算场景 watch 更多的是[观察]的作用,类似于某些数据的监听回调,用于观察 props $emit 或者本组件的值,当 数据变化时来执行回调进行后续操作无缓存性,页面重新渲染时值不变化也会执行 当我们要进行数值计算,而且依赖于其他数据,那么把这个数据设计为 computed 如果你需要在某个数据变化时做一些事情,使用 watch 来观察这个数据变化。 vue 组件的 scoped 属性的作用 在 style 标签上添加 scoped 属性,以表示它的样式作用于当下的模块,很好的实现了样式私有化的目的; Vue 组件中 data 为什么必须是函数 vue 组件中 data 值不能为对象,因为对象是引用类型,组件可能会被多个实例同时引用。 如果 data 值为对象,将导致多个实例共享一个对象,其中一个组件改变 data 属性值,其它实例也会受到影 响。 route 和 router 的区别是什么? route 是“路由信息对象”,包括 path,params,hash,query,fullPath,matched,name 等路由信息参数。 router 是“路由实例对象”,包括了路由的跳转方法(push、replace),钩子函数等。 为什么需要 nextTick? Vue 是异步修改 DOM 的并且不鼓励开发者直接接触 DOM,但有时候业务需要必须对数据更改–刷新 后的 DOM 做相应的处理,这时候就可以使用 Vue.nextTick(callback)这个 api 了。 请详细说下你对 vue 生命周期的理解 总共分为 8 个阶段创建前/后,载入前/后,更新前/后,销毁前/后。 创建前/后:在 beforeCreated 阶段,vue 实例的挂载元素 e l 和数据对象 d a t a 都为 u n d e f i n e d ,还未初始化。在 c r e a t e d 阶段, v u e 实例的数据对象 d a t a 有了, el 和数据对象 data 都为 undefined,还未初始 化。在 created 阶段,vue 实例的数据对象 data 有了, e l 和数据对象 d a t a 都为 u n d e f in e d ,还未初始化。在 cre a t e d 阶段, vu e 实例的数据对象 d a t a 有了, el 还没有。 载入前/后:在 beforeMount 阶段,vue 实例的$el 和 data 都初始化了,但还是挂载之前为虚拟的 dom 节点,data.message 还未替换。在 mounted 阶段,vue 实例挂载完成,data.message 成功渲染。 更新前/后:当 data 变化时,会触发 beforeUpdate 和 updated 方法。 销毁前/后:在执行 destroy 方法后,对 data 的改变不会再触发周期函数,说明此时 vue 实例已经解除 了事件监听以及和 dom 的绑定,但是 dom 结构依然存在 Vue2.0 中为什么会出现 vue 修改数据后页面没有刷新这个问题? 受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的。 动态给 vue 的 data 添加一个新的属性时会发生什么?怎样解决 如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。如果想要使添加的值做到响应式, 应当使用 s e t ( ) 来添加对象。 22 v u e 怎么获取 D O M 节点?我们在 v u e 中需要操作某一个元素的时候,可以在元素上添加 r e f 属性,使用 set()来添加对象。 22 vue 怎么获取 DOM 节点? 我们在 vue 中需要操作某一个元素的时候,可以在元素上添加 ref 属性,使用 se t ( ) 来添加对象。 22 vu e 怎么获取 D OM 节点?我们在 vu e 中需要操作某一个元素的时候,可以在元素上添加 re f 属性,使用 refs 来获取到该元素,进 而进行一些列操作 分析下 vue 项目本地开发完成后部署到服务器后报 404 是什么原因呢? 1.检查 nginx 配置,是否正确设置了资源映射条件; 2.检查 vue.config.js 中是否配置了 publicPath,若有则检查是否和项目资源文件在服务器摆放位置一致。 vue 能监听到数组变化的方法有哪些?为什么这些方法能监听到呢? 数组的 push、pop、shift、unshift、splice、sort、reverse 七种方法,Vue 源码中对这七种方法重写进行 重写 怎么将 axios 异步请求同步化处理? 使用 asyns/await