這幾個知識點,你真的都吃透了嗎?
# 先說 DOM:
DOM 全稱是 Document Object Model,也就是文檔對象模型
DOM 就是針對 HTML 和 XML 提供的一個API,就是為了開發(fā)人員能操作 HTML 內(nèi)容(比如添加節(jié)點、修改節(jié)點、刪除節(jié)點等),瀏覽器下載到一個網(wǎng)頁時,會將html解析成如下結(jié)構(gòu)的DOM樹,DOM樹中的所有內(nèi)容,都是一個個節(jié)點。

這個 API 使得在網(wǎng)頁被下載到瀏覽器之后改變網(wǎng)頁的內(nèi)容成為可能
來玩點好玩的:
打開 百度一下,打開控制臺,輸入
document.head,可以看到輸出了頁面的head部分內(nèi)容
此時,百度的標(biāo)簽是:

再進入控制臺,輸入: document.title = "度娘",看到變化

同樣,如果我們需要修改字體大小時,如下操作:
如果我們要修改頁面根元素的字體大小時(rem布局相關(guān)),使用 document.documentElement.style.fontSize = "24px"
?
# DOCUMENT
? 當(dāng)瀏覽器下載到一個網(wǎng)頁時,通常是HTML,這個 HTML 就叫 docuemnt,觀察 DOM樹 不難發(fā)現(xiàn)它也是一個節(jié)點,它是整棵DOM樹的根節(jié)點,這個節(jié)點包含了標(biāo)題 document.title,Url docuemnt.URL等屬性,可以直接在 JS 中訪問到。
在一個瀏覽器頁面中,可能有多個document,例如帶有 iframe 的頁面即是如此,在document中,我們還可以通過ID來訪問元素,如:
document.getElementById("nodeId")
?
# BOM
BOM 是 Browser Object Model,瀏覽器對象模型。
? BOM 是 為了控制瀏覽器行為而提供的接口??赡艹霈F(xiàn)前進一頁,后退一頁,跳轉(zhuǎn)至某個頁面,手機橫豎屏切換,程序還可能需要獲取屏幕的大小參數(shù)等,例如,頁面跳轉(zhuǎn)(向程序外跳轉(zhuǎn)):
location.
這個location就是BOM 里的一個對象
打開控制臺,我們可以看到除了href之外,location還有以下屬性:

可以看到我們熟悉的重新加載 reload 和 replace。
?
# WINDOW
? 和 location 類似,window也是 BOM 的一個對象,他是我們所謂的根對象,意義同 DOM 中的document一致,我們可以通過該對象獲取窗口位置,確定窗口大小,彈出對話框等等。
例如我想關(guān)閉當(dāng)前窗口: window.close()
例如我想緩存信息到本地: window.sessionStorage.setItem('key', 'value');
例如我想后退一步: window.history.go(-1)等
甚至,我想看一下我現(xiàn)在在使用什么瀏覽器(如查看andriod內(nèi)置webview): window.parent.browser等等
?
# 總結(jié)一下:
? DOM 是為了操作文檔出現(xiàn)的 API,document 是其的一個對象;
? BOM 是為了操作瀏覽器出現(xiàn)的 API,window 是其的一個對象;

上圖中,紅框部分即ABCD都屬于 BOM 內(nèi)容,綠框部分E屬于 DOM 內(nèi)容