java与js区别:
java基本数据类型:byte,short,int,float,double,long,boolean,char
js基本数据类型:Number,String,Boolean,Undefined,Null和一种复杂数据类型(Object)。
在 JavaScript 中,所有的数字包括整数和小数都是用 Number 类型来表示的。浮点数运算精度误差的问题,比如 console.log(0.1+0.2===0.3)// false,因为js是按照双精度64位浮点数,0.1和0.2转化为二进制会无限循环,有精度丢失。使用Number.EPSILON 可解决,他是js能够表示的最小精度,超过的直接去除。
Java是面向对象的语言,JavaScript是脚本语言,是基于对象和事件驱动的语言。
Java的源代码在执行之前必须经过编译,而JavaScript的代码不需要,可以由浏览器直接解释执行。
Java变量在使用之前必须声明,反之不要
代码的格式不一样。
Javascript 的代码是一种动态的,可以直接嵌入 HTML 文档,并且可动态装载,编写 HTML 文档就像编辑文本文件一样方便,其独立文件的格式为*.js。Java 是一种与 HTML 无关的格式,必须通过像 HTML 中引用外媒体那么进行装载,其代码以字节代码的形式保存在独立的文档中,其独立文件的格式为 *.class。
Java和JavaScript各有所长各有专精,Java的舞台在编程领域,而JavaScript的得心之处是在Web页面中,它几乎无所不能。
js闭包
函数执行,形成私有的执行上下文,使内部私有变量不受外界干扰,起到保护和保存的作用
作用:保护(避免命名冲突)
保存(解决循环绑定引发的索引问题)
变量不会销毁
可以使用函数内部的变量,使变量不会被垃圾回收机制回收应用:
设计模式中的单例模式
for循环中的保留i的操作
防抖和节流
缺点:会出现内存泄漏的问题
vue方法和 生命周期
var vm = new Vue({
el: '#app',// 控制区域
data: {},// 定义数据
methods: {},// 定义方法
filters: {},// 定义私有过滤器
directives: {},// 定义私有指令
components: { }, // 定义实例内部私有组件的
beforeCreate() { },// 实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性
created() { }, //实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板
beforeMount() { },// 此时已经完成了模板的编译,但是还没有挂载到页面中
mounted() { },// 此时,已经将编译好的模板,挂载到了页面指定的容器中显示
beforeUpdate() { },// 状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的 数据还是旧的,因为此时还没有开始重新渲染DOM节点
updated() { },// 实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了!
beforeDestroy() { },// 实例销毁之前调用。在这一步,实例仍然完全可用。
destroyed() { }, //Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
computed : 计算属性,支持缓存,只有依赖数据发生改变,才会重新进行计算,不支持异步。
watch:侦听属性,不支持缓存,数据变,直接会触发相应的操作,支持异步;
***使用场景watch 监听某个数据的变化(监听完调用什么函数) 一个数据影响多个数据
(比如:浏览器自适应、监控路由对象、监控自身属性变化)
computed 计算后返回新 一个数据受多个数据影响(比如:计算总价格、过滤某些数据)***
mixins : [] 混入
})
Vue优化方式⭐⭐⭐⭐⭐
v-if 和v-show
使用Object.freeze()方式冻结data中的属性,从而阻止数据劫持
组件销毁的时候会断开所有与实例联系,但是除了addEventListener,所以当一个组件销毁的时候需要手动去removeEventListener
图片懒加载
路由懒加载
为减少重新渲染和创建dom节点的时间,采用虚拟dom
虚拟dom使用的是diff算法⭐⭐⭐⭐⭐
diff算法是指对新旧虚拟节点进行对比,并返回一个patch对象,用来存储两个节点不同的地方,最后利用patch记录的消息局部更新DOM
Vue的Key的作用 ⭐⭐⭐⭐
key主要用在虚拟Dom算法中,每个虚拟节点VNode有一个唯一标识Key,通过对比新旧节点的key来判断节点是否改变,用key就可以大大提高渲染效率,这个key类似于缓存中的etag。
面试官:Vue-router的模式⭐⭐⭐⭐⭐
hash模式
利用onhashchange事件实现前端路由,利用url中的hash来模拟一个hash,以保证url改变时,页面不会重新加载。
history模式
利用pushstate和replacestate来将url替换但不刷新,但是有一个致命点就是,一旦刷新的话,就会可能404,因为没有当前的真正路径,要想解决这一问题需要后端配合,将不存在的路径重定向到入口文件。
Vue组件之间的通信方式⭐⭐⭐⭐⭐
①子组件设置props + 父组件设置v-bind:/:
②子组件的 ‘$$’emit + 父组件设置v-on/@
子传父
任意组件通信,新建一个空的全局Vue对象,利用 e m i t 发 送 , emit发送, emit发送,on接收
③Vuex
1、state: 用于保存整个项目中用到的全局变量,是响应式的。与之对应的是mapState
函数(当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性)具体的用法可以参考官方文档。Vuex
2、getters: 可以认为是 store 的计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。 mapGetters: mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性。
3、Mutation: 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数。
注意: 1、Mutation 必须是同步函数;2、使用常量替代 Mutation 事件类型;3、Mutation 需遵守 Vue 的响应规则。
mapMutations 辅助函数将组件中的 methods 映射为 store.commit 调用(需要在根节点注入 store)。
4、Action: Action 提交的是 mutation,而不是直接变更状态。 Action 可以包含任意异步操作。Action 通过 store.dispatch 方法触发。 在组件中分发 Action:this.$store.dispatch('xxx') 分发 action,或者使用 mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用(需要先在根节点注入 store)。
5、Module Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割。
④provide和inject
⑤attrs和listeners
⑥eventbus
vue router
包含有router-link、router-view组件
重定向:routes:[{undefined{ path: '/a', redirect: '/b' }}]
vue-router钩子函数有哪些?
全局前置守卫:beforeEach((to, from, next)=>{to:即将进入的路由对象form:当前导航正要离开的路由next():进行管道中的下一个钩子})
全局解析守卫:beforeResolve((to, from, next)=>{})
全局后置钩子:afterEach((to,form)=>{})
路由独享守卫:beforeEnter((to, from, next)=>{})
组件内的守卫:beforeRouteEnter (to, from, next) {// 在渲染该组件的对应路由被 confirm 前调用// 不!能!获取组件实例 this// 因为当守卫执行前,组件实例还没被创建},
组件内的守卫:beforeRouteUpdate (to, from, next) {// 在当前路由改变,但是该组件被复用时调用// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。// 可以访问组件实例 this},
组件内的守卫:beforeRouteLeave (to, from, next) {// 导航离开该组件的对应路由时调用 //可以访问组件实例 this}。
作用:vue-router提供的导航钩子主要用来拦截导航,让它完成跳转或取消。
webpack
webpack 就是一个前端打包bunder工具,它拥有非常多的小工具,可以把代码从开发模式变成线上模式,最终交给浏览器渲染。
包含loader:webpack自身只支持js和json这两种格式的文件,对于其他文件需要通过loader将其转换为commonJS规范的文件后,webpack才能解析到
包含plugin:是用于在webpack打包编译过程里,在对应的事件节点里执行自定义操作,比如资源管理、bundle文件优化压缩等操作
webpack打包原理:
把所有依赖打包成一个 bundle.js 文件,通过代码分割成单元片段并按需加载.
axios
promise
resolve
then
前端组件丰富,流行使用vant组件框架,对于图表使用echart组件框架.
网友评论