1、vue的生命周期
每个vue实例在创建时都要经历一系列初始化的过程,例如将实例挂载到dom并监听数据变化等,伴随着这个过程我们可以添加一些自己的运行代码。生命周期有8个函数,分别是创建前,创建完成,挂载前,挂载完成,更新前,更新完成和销毁前,销毁完成。
2、js基本数据类型 和引用类型
基本数据类型:null,undefined,Number,String,Boolean,Symbol。
基本数据类型的值是直接在栈内存中存储。值与值之间是独立存在的,修改一个变量不会影响其他的变量。比较两个基本数据类型时,就比较值。
Symbol是ES6新增的一种数据类型,表示独一无二的值。一般用于属性名的独一无二标识。
引用数据类型:Object,Array、Function、Data、RegExp等
对象是保存在堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象引用),如果两个变量保存的是同一个对象引用,当一个通过变量修改属性时,另一个也会受到影响。比较两个引用类型时,它比较的是对象的内存地址,地址不同,就会返回false。
3、null和undefined的区别
undefined:所有声明以后没被赋值的变量的默认值。(变量未赋值,对象属性不存在,函数的调用少了参数,函数未return。)
null:主动释放变量的引用对象,表示一个变脸不再指向任何地址。(手动释放内存、作为函数的参数,原型链的顶端)
4、object类型和string类型进行“==”比较
string是基本数据类型,object是引用数据类型,具体参考2
5、普通函数和箭头函数的区别
箭头函数相当于匿名函数,简化了函数的定义
| 普通函数 | 箭头函数 | 构造函数(特殊的普通函数) | |
|---|---|---|---|
| this | 函数被调用时的对象(修改指向的方法call() , bind() , apply()) | 声明函数时的作用域(无法修改this指向) | 指向new出来的新的实例对象(内部用this 来构造属性和方法) |
| 构造函数 | 可以被当做构造函数使用,可以new,有prototype、super | 不能被当做构造函数使用,new命令会报错,没有prototype这个属性,也不能super访问原型的属性。 | \ |
| arguments | arguments | ...arr(rest参数) | \ |
| 调用方式 | 直接调用(如果没有定义返回,会undefined) | 直接使用 | 需要使用new关键字来调用 new Person(),返回一个新对象 |
instanceof 可以检查一个对象是否是一个类的实例,是则返回true;
per instanceof Person;
6、3xx、4xx、5xx里常见的状态码
3xx:重定向有关。301永久重定向。302临时重定向。304资源没有修改,使用之前的缓存。
4xx:和客户端有关。404资源不存在或找不到,400客户端发送的报文有误,403服务端禁止访问,401需要登录访问。
5xx:和服务端有关。500服务器错误
7、设置浏览器60s缓存
cache-control:max-age=60
8、跨域及解决方法,这些解决方法有什么优缺点
原因:同源策略,就是浏览器为了保证用户信息的安全,防止恶意的网站窃取数据,禁止不同域之间的JS进行交互。(域名,协议,端口)
cors跨域:(Cross Origin Resouces Sharing跨域资源共享)定义了必须在访问跨域资源时,浏览器与服务器应该如何沟通。CORS背后的基本思想就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是失败。服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问。
只需要在后台(服务器)中加上响应头来允许域请求!在被请求的Response header中加入以下设置,就可以实现跨域访问了!
//指定允许其他域名访问
'Access-Control-Allow-Origin:*'//或指定域
//响应类型
'Access-Control-Allow-Methods:GET,POST'
//响应头设置
'Access-Control-Allow-Headers:x-requested-with,content-type'
通过jsonp跨域:通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。所以jsonp是需要服务器端的页面进行相应的配合的。(即用JavaScript动态加载一个script文件,同时定义一个callback函数给script执行而已。)
<script>
function getData(res){
console.log(res)
}
</script>
<script src="http://www.baidu.com/new?callback=getData">
JSONP的优点是:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequest或ActiveX的支持;并且在请求完毕后可以通过调用callback的方式回传结果。
JSONP的缺点则是:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。
H5 window.postMessage跨域:
window.postMessage("字符串",“*”)
框架里面vue的跨域:(代理跨域proxy)本质上是cors跨域
vue.config.js
module.exports={
devServer:{
proxy:{
'/api':{
target:'http://www.baidu.com/ding.json',//目标域
changeOrigin:ture,//是否允许跨域
pathRewrite:{//路径重写
'^/api'
}}}}}
\