列举三种强制类型转换和两种隐式类型转换
强制(parseInt,parseFloat,number)
隐式(== – ===)
强制类型转换
Number(参数)把任何类型转换成数值类型
parseInt(参数1,参数2)将字符串转换成整数
parseFloat()将字符串转换成浮点数字
string(参数):可以将任何类型转换成字符串
Boolean()可以将任何类型的值转换成布尔值
隐式类型转换
(1).四则运算
加法运算符+是双目运算符,只要其中一个是string类型,表达式的值便是一个String。
对于其他的四则运算,只有其中一个是Number类型,表达式的便是一个Number。
对于非法字符的情况通常会返回NaN:'1'*'a' // => NaN,这是因为parseInt(a)值为NaN,1*NaN还是NaN
(2).判断语句
判断语句中的判断条件需要是 Boolean类型,所以条件表达式会被隐式转换为Boolean。其转换规则则同Boolean的构造函数。比如:
var obj = {};if(obj){
while(obj);
}
(3).Native代码调用
JavaScript宿主环境都会提供大量的对象,它们往往不少通过JavaScript来实现的。JavaScript给这些函数传入的参数也会进行隐式转换。例如BOM提供的alert方法接受String类型的参数:alert({a:1}); //=>[object Object]
JavaScript typeof返回哪些数据类型
undefined
string
boolean
number
symbol(ES6)
Object
Function
window.onload 和document.ready的区别
document.ready和window.onload都是在都是在页面加载完执行的函数,大多数情况下差别不大,但也是有区别的。
document.ready是DOM结构绘制完毕后就执行,不必等到加载完毕。 意思就是DOM树加载完毕,就执行,不必等到页面中图片或其他外部文件都加载完毕。并且可以写多个.ready。
window.onload:是页面所有元素都加载完毕,包括图片等所有元素。只能执行一次。
怎样添加、移除、复制、创建、查找节点
创建新节点
createDocumentFragment() //创建一个DOM片段
createElement() //创建一个具体的元素
createTextNode() //创建一个文本节点
添加、移除、替换、插入
appendChild()
removeChild()
replaceChild()
insertBefore()
查找
getElementsByTagName() //通过标签名称
getElementsByName() //通过元素的Name属性的值
getElementById() //通过元素Id,唯一性
在JavaScript中什么是伪数组?如何将伪数组转化为标准数组
伪数组:具有length属性,按索引方式存储数据,不具有数组的push,pop等方法
转化:1.Array.prototype.slice.call(fakeArray)
2.Array.from(fakeArray)
jQuery的事件委托on、live、delegate之间有什么区别
live 把事件委托交给了document(根节点),document 向下去寻找符合条件的元素(), 不用等待document加载结束也可以生效。
delegate可指定事件委托对象,相比于live性能更优,直接锁定指定选择器;
on事件委托对象选填,如果不填,即给对象自身注册事件,填了作用和delegate一致。
band只能给调用它的时候已经存在的元素绑定事件,不能给未来新增的元素绑定事件,存在局限性。
描述一次完整的http请求过程(输入url敲回车发生了什么)
在浏览器输入地址时,先从本地系统下hosts文件里寻找对应ip,如果有就直接使用,没有就进行DNS解析,DNS解析域名后会得到服务器的ip地址,浏览器向web服务器发送http请求,就开始建立连接,由TCP协议完成,通过三次握手连接,连接后浏览器向服务器发送http请求,服务器返回一个http响应,浏览器接受响应后,如果响应内容为html文档,就由浏览器解析,渲染呈现给用户,渲染页面前,需要构建DOM树和CSSOM树,最后关闭TCP连接或继续保持连接,通过四次挥手关闭连接
扩展1.DNS服务器怎么进行域名解析?
www.168.com
客服端向本地DNS服务器询问ip,本地DNS服务器查找自身缓存,没有就向根服务器询问,根服务器会告知本地DNS服务器这个域名由.com管理,本地DNS服务器会向.com域服务器询问ip,.com域服务器会告知在168.com服务器中,本地DNS服务器向168.com询问ip,168.com域服务器返回ip给本地DNS服务器,本地DNS服务器将ip地址给客户端并缓存
扩展2.三次握手
1.客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认
2. 服务器收到syn包,确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
3.客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手
扩展3.四次挥手
1.浏览器发完数据后,发送FIN请求断开连接
2.服务器发送ACK表示同意
3.服务器发送FIN请求断开连接
4.浏览器发送ACK表示同意
http状态码有哪些
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误
后台管理系统权限你是如何实现的?
定义路由表的时候要定义两张表,静态路由表(无需权限的使用)和权限路由表(与后台返回的权限匹配用),然后登录,如果登录成功,我就用路由全局守卫拦截,判断是否已有用户权限列表,如果没有就调用接口重新获取,如果有就将权限数据存在vuex中,方便我们在各个组件中使用,vuex中的权限数据和需要访问权限的路由表比对,生成当前账户对应的权限路由表,用过addRoutes方法来动态添加路由规则,最后生成可访问的侧边栏菜单