一些知识点
axios和ajax的区别:
axios通过Promise实现ajax技术进行封装,axios是ajax技术的一部分。
ajax针对MVC编程,不符合现在流行的MVVM。
axios从node.js中创建http请求,支持Promise API,客户端支持防止CSRF,提供了一些并发请求的接口。
注:防止CSRF就是让每个请求都带一个cookie中拿到的key,根据浏览器同源策略,假冒的网站拿不到cookie中的key,这样后台就可以轻松的辨别这个请求是不是假冒网站中的诱导输入,从而白去正确的策略。
map和forEach的区别:
①map有返回值,forEach没有返回值
②map中return将值返回到新数组中,该新数组和原数组没有引用关系,forEach直接改变原数组
vuex:
定义:公共状态管理模式
特点:①多组件共享状态,就是一个变量在所有的组件中都可以使用
②一个组件发生改变时,其他组件也会跟着变
数据传递流程:当组件中修改数据的时候,必须通过store.dispatch来调用actions中的方法,当actions中的方法被触发的时候,通过调用commit中的方法来触发mutations中的方法,mutations中的方法用来修改数据。数据发生改变,触发视图改变。
常用的5个属性:state、actions、mutations、getters、modules
分别对应的辅助函数:mapState、mapActions、mapMutations、mapGetters
路由安全卫士:
全局前置守卫:beforeEach----所有的路由跳转时都会经过这个函数
路由独享守卫:beforeEnter----在路由配置项中使用,只对当前路由起作用
组件内部守卫:beforeRouteEnter----进入路由前(当前钩子函数中不能访问到this,场景:登录验证、热力图、权限验证、消息通知)
beforeRouteUpdate----路由更新时(组件复用时,例如使用动态路由传参,在mounted生命周期中只有第一次能获取到参数,这会造成在详情页的地址栏更换,但页面不变的情况。此时可以用该路由,to.params.id可以获取到参数。另外,watch监听也可以获得参数:newVal.params.id)
beforeRouteLeave----路由离开时(离开前做一些判断,场景:未支付、未保存、答题系统、退出登录)
js事件机制和浏览器缓存:
事件:
JavaScript是事件驱动型语言
绑定事件:addEventListener、attachEvent(ie8)、on方法
解绑事件:removeEventListener、detachEvent(ie8)
抛发事件:使用非系统事件时,dispatchEvent(new Event("自定义事件名")),先侦听后抛发
事件原理:this===e.currentTarget
e.target===e.srcElement
事件的三个阶段:捕获、目标、冒泡
事件委托:也叫事件代理,利用事件冒泡,将同一类型的事件绑定给其父级。
event对象:e.clientX、e.clientY----视口
e.pageX、e.pageY----页面
e.offsetX、e.offsetY----当前对象
e.layerX、e.layerY----自身和父级无定位时,页面,同e.pageX、e.pageY;自身无定位,父级有定位时或者有overflow:hidden时,父元素;自身无定位时,当前对象,同e.offsetX、e.offsetY
e.screenX、e.screenY----屏幕
e.movementX、e.movementY----上一次坐标
e.type----事件类型
e.button----0代表左键,1代表中键,2代表右键(ie中:1代表左键,4代表中键,2代表右键)
e.timeStamp----返回当前事件执行所用的时间(ms)
阻止事件冒泡:e.stopPropagation(ie8:e.cancelBubble=true)
阻止浏览器默认事件:e.preventDefault(ie8:e.returnValue:false)
event事件类型:change、load、error、submit、reset、resize、select、scroll
浏览器缓存:
cookie、localStorage、sessionStorage 见:https://www.cnblogs.com/wuqilang/p/11204668.html
js如何区分数组和对象:
①通过constructor识别:{}.constructor----返回Object,[].constructor----返回Array
②通过instance of识别:{} instanceof Array----返回false,[]instanceof Array----返回true
③通过Object.prototype.toString.call()识别:Object.prototype.toString.call({})----返回[object Object],Object.prototype.toString.call([])----返回[object Array]
④通过ES6中Array.isArray()识别:Array.isArray({})----返回false,Array.isArray([])----返回true
ES7的异步使用:
async、await
async返回一个Promise,如果在async函数中使用return就相当于执行了Promise中reslove。
await等待处理,普通加载是异步的,而循环是同步的,所以当前未加载完毕就会加载下一个,这样会造成加载顺序的混乱。使用await就是让当前这个过程完毕再去循环下一个。
async created() { if(!sessionStorage.getItem("movieList")){ let data = await movie_now_api(this.cityId); this.movieList = data.data.movieList; sessionStorage.setItem("movieList",JSON.stringify(data.data.movieList)) } }
git怎样链接远程服务,回滚代码,常用到的指令:
链接远程:git romote add origin url----将本地仓库和远程仓库连接
git clone url----克隆远程仓库代码
git push origin master----将本地仓库的代码提交到线上的master分支
回滚代码:git reset --hard 版本id
常用指令:git init
git romote add origin url
git clone url
git status
git add .
git commit -m "注释内容"
git log --pretty=oneline
git reflog
git branch
gir branch -b 分支名
git checkout 分支名
git checkout -b 分支名
git merge dev
git pull