window.onload 和 document.onDOMContentLoaded 有什么区别?
两者的区别主要是触发的时机不同,DOMContentLoaded是在DOM树构建完成触发,而onload是在DOM树构建完成、外部的js、css、图片等资源都加载完成后再触发。
借助DevTools Network可以知道DOMcontentLoaded(紫色线)一般比onload(红色线)的触发时间更早。
URL 如何编码解码?为什么要编码?
- encodeURI\decodeURI 该方法不会对
ASCII字母
、数组
、~!@#$&*()=:/,;?+'
字符进行编解码 - encodeComponent\decodeURIComponent 该方法不会对
ASCII字母
、数组
、~!*()'
字符进行编解码
var url = 'https://www.baidu.com/s?wd=编码';
console.log(encodeURI(url));// "https://www.baidu.com/s?wd=%E7%BC%96%E7%A0%81"
console.log(encodeURIComponent(url)); // "https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%E7%BC%96%E7%A0%81"
URL(统一资源标识定位符)只能使用英文字母、阿拉伯数字和某些标点符号($-_.+!*’(),&/:;=?@),不能使用其他文字和符号。所以当URL中出现中文或不安全字符(#”%<>[]{}|^`~)时需要进行编码才能使用。
关于URL编码,RFC1738做了如下的规定:
“Only alphanumerics [0-9a-zA-Z], the special characters “$-_.+!*’(),” [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.”
RFC继而说明了保留字、特殊符号、不安全字符的含义——也就是说,下面三类字符可以不经过编码,直接出现在URL上:
- [0-9a-zA-Z]
- 特殊字符:$-_.+!*’(),
- 保留字符:&/:;=?@
为了让我们思路更清晰,我们再总结一下,哪些字符必须要编码:
- ASCII表中没有对应可显示字符的,例如汉字
- 不安全字符,包括:#”%<>[]{}|^`~
- 不当做保留字符来使用的保留字符,即&/:;=?@
cookie & session &localStorage 分别是什么?
cookie是浏览器第一次访问网页服务器后,服务发给浏览器用来标识用户身份的一段数据,大小不能超过4KB。
session是服务器保存的用来跟踪用户回话状态的。使用session id来标识用户,session id保存在cookie中。
localStorage是HTML5中新增API,用于将大量数据(最大5M)保存在浏览器中,保存后数据永远存在不会失效过期,除非用 js手动清除。
网友评论