1.vue框架的优点
vue是一个MVVM框架库,比较容易上手,是一个用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用,便于与第三方库和已有项目结合。Vue的目标是通过尽可能简单的API实现”响应的数据绑定”和组合的视图组件。
2.什么是MVVM和MVC?它们之间的区别是什么?
MVVM把双向数据绑定思想作为核心,因此view和model之间没有联系,通过viewmodel进行交互,而且model和viewmodel之间的交互是双向的,因此视图的数据变化会同时修改数据源,而数据源的变化也会立即反应到view上。 mvc是比较直观的架构模式,用户操作view,view把操作传递给controller去处理逻辑,向model发送数据的请求,然后model把数据给渲染到view上面。 它们之间的区别主要是mvc中的controller演变成了mvvm中的viewmodel。mvvm主要解决了mvc中大量操作dom的问题。
3.vue与react和angular的区别
A.与react的区别 相同点:都支持组件化与响应式的可视化组件,在组件开发中都支持mixins,都有对应的钩子函数,都有路由和状态管理。 不同点:react使用jsx解析页面,vue使用模版解析页面。react操作虚拟dom的时候,会对渲染出来的结果做脏检查,而vue在模板中提供了指令,过滤器等,可以非常方便,快捷地操作虚拟dom。
B.与angular的区别 相同点:都支持内置指令和自定义指令,都支持内置过滤器和自定义过滤器,都支持双向数据绑定,都不支持低端浏览器。 不同点:angular学习成本高,比如增加了dependence injection特性,而vue本身提供的api都比较简单,在性能上,angular依赖对数据做脏检查,所以watcher越多越慢,vue使用基于依赖追踪的观察并且使用异步队列更新,所有的数据都是独立触发的。
4.this.$nextTick作用
对数据进行修改之后,可以获取到dom更新之后的数据。
5.em与rem的区别
em与rem用于做响应式页面,是相对长度单位,不是固定不变的。em相对于父级元素,rem相对于跟元素。
6.双向数据绑定了解吗
实现mvvm的双向数据绑定,是采用数据劫持结合发布者-订阅者模式的方式,通过object.defineproperty来劫持各个属性的setter和getter,在数据变动时发布消息给订阅者,触发相应的回调函数。就必须实现以下几点:
A.实现一个数据监听器observer,能够对数据所有的属性进行监听,如有变动可以拿到最新值并通知订阅者。
B.实现一个指令解析器compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数。
C.实现一个watcher,作为连接observer和compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图。
D.mvvm入口函数,整合以上三者。
最后问了object.defineproperty的缺点
A.只能劫持对象的属性,因此我们需要对每个对象的每个属性进行遍历。如果能直接劫持一个对象,就不需要递归和遍历了。
B.无法监控到数组下标的变化,导致直接通过数组的下标给数组设置值,不能实时响应。所以vue才设置了7个变异数组(push、pop、shift、unshift、splice、sort、reverse)的hack方法来解决问题。
7.组件data为什么是一个函数?
组件是可复用的vue实例,一个组件被创建好之后,就可能被用在各个地方,而组件不管被复用了多少次,组件中的data数据都应该是相互隔离的,互不影响的,基于这一理念,组件每复用一次,data数据就应该被复制一次,之后,当某一处复用的地方组件内data数据被改变时,其它复用地方组件的data数据不受影响。
8.优雅降级与渐进增强
优雅降级是一开始就构建站点的完整功能,然后针对浏览器测试和修复。比如一开始使用css3的特性构建了一个应用,然后逐步针对各大浏览器进行hack使其可以在低版本浏览器上正常浏览。
渐进增强是一开始就针对低版本的浏览器进行构建页面,完成基本功能,然后再对高级浏览器进行效果、交互、追加功能达到更好的体验。
9.数组去重方法
A.var arr=[1,2,2,3,5,6,6,9]; function unique(arr){ for(var i=0;i<arr.length;i++){ for(var j=i+1;j<arr.length;j++){ if(arr[i]==arr[j]){ arr.splice(j,1); j--; } } } return arr; } unique(arr);
B.function unique(arr){ var newarr=[]; Array.forEach(item=>{ return newarr.includes(item)?’’:newarr.push(item) }); return newarr; } unique(arr);
10.xml与json的区别
A.传输速度方面:json的速度要远远快于xml; B.数据描述方面:json对数据的描述性比xml差; C.数据交互方面:json与javascript的交互更加方便,更容易解析处理,更好的数据交互; D.数据体积方面:json相对于xml来讲,数据的体积小,传输的速度更快些; E.解析手段方面:json与xml同样拥有丰富的解析手段; F.流行度方面:xml的解析得考虑子节点父节点,然人头昏眼花,而json的解析难度几乎为0,这一点xml输的真是没话说; G.编码难度方面:json的编码明显比xml容易许多,即使不借助工具也能写出json的代码,可是要写好xml就太不容易了。 H.可扩展性方面:xml天生有很好的扩展性,json当然也有,没有什么是xml能扩展,json不能的; I.可读性方面:json与xml的数据可读性基本相同,一边是建议的语法,一边是规范的标签形式,xml可读性较好些。