window.onload 和 document.onDOMContentLoaded 有什么區(qū)別?
兩者的區(qū)別主要是觸發(fā)的時機不同,DOMContentLoaded是在DOM樹構(gòu)建完成觸發(fā),而onload是在DOM樹構(gòu)建完成、外部的js、css、圖片等資源都加載完成后再觸發(fā)。
借助DevTools Network可以知道DOMcontentLoaded(紫色線)一般比onload(紅色線)的觸發(fā)時間更早。

URL 如何編碼解碼?為什么要編碼?
- encodeURI\decodeURI 該方法不會對
ASCII字母、數(shù)組、~!@#$&*()=:/,;?+'字符進(jìn)行編解碼 - encodeComponent\decodeURIComponent 該方法不會對
ASCII字母、數(shù)組、~!*()'字符進(jìn)行編解碼
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(統(tǒng)一資源標(biāo)識定位符)只能使用英文字母、阿拉伯?dāng)?shù)字和某些標(biāo)點符號($-_.+!*’(),&/:;=?@),不能使用其他文字和符號。所以當(dāng)URL中出現(xiàn)中文或不安全字符(#”%<>[]{}|^`~)時需要進(jìn)行編碼才能使用。
關(guān)于URL編碼,RFC1738做了如下的規(guī)定:
“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繼而說明了保留字、特殊符號、不安全字符的含義——也就是說,下面三類字符可以不經(jīng)過編碼,直接出現(xiàn)在URL上:
- [0-9a-zA-Z]
- 特殊字符:$-_.+!*’(),
- 保留字符:&/:;=?@
為了讓我們思路更清晰,我們再總結(jié)一下,哪些字符必須要編碼:
- ASCII表中沒有對應(yīng)可顯示字符的,例如漢字
- 不安全字符,包括:#”%<>[]{}|^`~
- 不當(dāng)做保留字符來使用的保留字符,即&/:;=?@
cookie & session &localStorage 分別是什么?
cookie是瀏覽器第一次訪問網(wǎng)頁服務(wù)器后,服務(wù)發(fā)給瀏覽器用來標(biāo)識用戶身份的一段數(shù)據(jù),大小不能超過4KB。
session是服務(wù)器保存的用來跟蹤用戶回話狀態(tài)的。使用session id來標(biāo)識用戶,session id保存在cookie中。
localStorage是HTML5中新增API,用于將大量數(shù)據(jù)(最大5M)保存在瀏覽器中,保存后數(shù)據(jù)永遠(yuǎn)存在不會失效過期,除非用 js手動清除。