1,几个使用的BOM属性对象方法
什么是BOM,BOM是浏览器对象,有哪些常用的BOM属性呢?
1,location
location.href-- 返回或设置当前文档的URL
location.search -- 返回URL中的查询字符串部分。例如:
http://www.dreamdu.com/dreamdu.php?id=5&name=dreamdu返回包括(?)后面的内容?id=5&name=dreamdu
location.hash -- 返回URL#后面的内容,如果没有#,返回空
location.host -- 返回URL中的域名部分,例如
www.dreamdu.com
location.hostname -- 返回URL中的主域名部分,例如dreamdu.com
location.pathname -- 返回URL的域名后的部分。例如http://www.dreamdu.com/xhtml/返回/xhtml/
location.port -- 返回URL中的端口部分。例如http://www.dreamdu.com:8080/xhtml/返回8080
location.protocol -- 返回URL中的协议部分。例如http://www.dreamdu.com:8080/xhtml/ 返回(//)前面的内容http:
location.reload() -- 重载当前页面
2,history对象
history.go(num) 前进或者后退指定的页面数
history.back() 后退一页
history.forward() 前进一页
3,navigator对象
navigator.userAgent -- 返回用户代理头的字符串表示(就是包括浏览器版本信息等的字符串)
navigator.cookieEnabled -- 返回浏览器是否支持(启用)cookie
2,说下http2.0
http和https的区别:https是基于ssl加密的http协议
http2.0提升访问速度、允许多路复用、服务端推送、首部压缩
3,400 401 403状态码
400:请求无效
产生原因:前端提交请求的字段名或者类型与后端的实体没有保持一致
401:当前请求需要用户验证
403:服务器已经得到请求,但是拒绝执行
状态码大全:https://www.php.cn/web/web-http200.html
4,fetch发送两次请求的原因
fetch发送post请求的时候,总是发送两次,第一次状态是204,第二次才成功?
因为fetch发送post请求的时候,导致fetch第一次发送了一个options请求,询问服务器是否支持修改的请求头,如果服务器支持,则在第二次中发送真正的请求
5,js中defer和async区别
defer(延迟脚本):
<script defer type="text/javascript" src="test.js"></script>
defer只适用于外部脚本文件
这个属性的作用是表明脚本在执行时不会影响页面的构造,也就是说,脚本会被延迟到整个页面都解析完毕后运行。也就相当于告诉浏览器立即下载,但延迟执行
HTML5规范要求脚本按照它们出现的先后顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行
async(异步脚本):
<script async type="text/javascript" src="test1.js"></script>
<script async type="text/javascript" src="test2.js"></script>
异步脚本:async属性只适用于外部脚本文件,并告诉浏览器立即下载文件
但与defer不同的是:标记为async的脚本并不保证按照指定他们的先后顺序执行
上面代码test2.js可能会在test1.js之前执行
6,为什么先加载css后加载js
先加载css后加载js,因为css加载会阻塞浏览器渲染,为了打开网页白屏时间缩短,会优先选择加载css;后加载js是因为js中可能会修改DOM元素,js加载会阻塞浏览器解析html,造成获取不到DOM的情况。
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="css/*.css" rel="external nofollow" >
<script src="js/*.js></script>
</head>
DOM文档的加载顺序是由上而下的顺序加载
1,DOM加载到link标签
css文件的加载是与DOM的加载并行的,也就是说,css在加载时Dom还在继续加载构建,而过程中遇到的css样式或者img,则会向服务器发送一个请求,待资源返回后,将其添加到dom中的相对应位置中;
2,DOM加载到script标签
由于js文件不会与DOM并行加载,因此需要等待js整个文件加载完之后才能继续DOM的加载,倘若js脚本文件过大,则可能导致浏览器页面显示滞后,出现“假死”状态,这种效应称之为“阻塞效应”;会导致出现非常不好的用户体验;
而这个特性也是为什么在js文件中开头需要$(document).ready(function(){})或者(function(){})或者window.onload,即是让DOM文档加载完成之后才执行js文件,这样才不会出现查找不到DOM节点等问题;
js阻塞其他资源的加载的原因是:浏览器为了防止js修改DOM树,需要重新构建DOM树的情况出现;
网友评论