背景:學習過JavaScript的我們都知道,JavaScript 有三部分構成,ECMAScript,DOM和BOM,根據宿主(瀏覽器)的不同,具體的表現形式也不盡相同,ie和其他的瀏覽器風格迥異。BOM和DOM,從字面上進行對比,可以很清晰的看出,BOM與DOM的最大區別就是B(Browser)和D(Document)的區別,一字之差,所表達的東西就不一樣,到底二者有何不同,用在什么地方,下面簡單介紹一下這兩者的聯系與區別。
### 一、BOM
BOM:(Browser Object Mode) 瀏覽器對象模型。
它提供了很多對象,用于訪問瀏覽器的功能。BOM缺少規范,每個瀏覽器提供商又按照自己想法去擴展它,那么瀏覽器共有對象就成了事實的標準。所以,BOM本身是沒有標準的或者還沒有哪個組織去標準它。
BOM的對象:window對象、location對象、history對象**
1、window對象
BOM的核心對象是window,它表示瀏覽器的一個實例。window對象處于JavaScript結構的最頂層,對于每個打開的窗口,系統都會自動為其定義window 對象。

window對象的屬性:
window對象有一系列的屬性,這些屬性本身也是對象。


window對象的方法:


window 下的屬性和方法,可以使用window.屬性、 window.方法()或者直接屬性、 方法()的方式調用。例如: window.alert()和alert()是一個意思。
2、location對象
location是 BOM對象之一,它提供了與當前窗口中加載的文檔有關的信息,還提供了一些導航功能。事實上, location對象是 window 對象的屬性,也是 document對象的屬性;所以 window.location和document.location等效。
location對象的屬性:


location對象的方法:

3、history對象
history對象是 window對象的屬性, 它保存著用戶上網的記錄, 從窗口被打開的那一刻算起。
history對象的屬性:

history對象的方法:

### 二、DOM
DOM:(Document Object Model)文檔對象模型。
針對 HTML和 XML文檔的 API( 應用程序接口)。 DOM描繪了一個層次化的節點樹,運行開發人員添加、移除和修改頁面的某一部分。 DOM脫胎于 Netscape及微軟公司創始的 DHTML(動態 HTML),但現在它已經成為表現和操作頁面標記的真正跨平臺、語言中立的方式。
DOM中的三個字母, D(文檔)可以理解為整個 Web加載的網頁文檔; O(對象)可以理解為類似 window對象之類的東西,可以調用屬性和方法,這里我們說的是 document對象; M(模型)可以理解為網頁文檔的樹型結構。
DOM有三個等級, 分別是 DOM1、 DOM2、 DOM3, 并且 DOM1在 1998年 10月成為W3C標準。 DOM1所支持的瀏覽器包括 IE6+、 Firefox、 Safari、 Chrome和 Opera1.7+。
PS:IE中的所有 DOM對象都是以 COM對象的形式實現的,這意味著 IE中的 DOM?可能會和其他瀏覽器有一定的差異。
1、節點
加載 HTML頁面時, Web瀏覽器生成一個樹型結構, 用來表示頁面內部結構。 DOM將這種樹型結構理解為由節點組成。

從上圖的樹型結構,我們理解幾個概念, html標簽沒有父輩,沒有兄弟,所以 html標簽為根標簽。head標簽是 html子標簽, meta和 title標簽之間是兄弟關系。 如果把每個標簽當作一個節點的話,那么這些節點組合成了一棵節點樹。*
2、元素節點方法

3、DOM的node節點和層次節點屬性
node節點可以分為元素節點、屬性節點和文本節點,而這些節點又有三個非常有用的屬性,分別為: nodeName、 nodeType和 nodeValue。
節點的層次結構可以劃分為: 父節點與子節點、 兄弟節點這兩種。 當我們獲取其中一個元素節點的時候,就可以使用層次節點屬性來獲取它相關層次的節點。


4、DOM節點操作
DOM不單單可以查找節點, 也可以創建節點、 復制節點、 插入節點、 刪除節點和替換節點。

### 三、聯系

從圖中可以看出,DOM的最根本的對象是BOM的window對象的子對象。
Document對象,實際上是window對象的屬性。這個對象的獨特之處是唯一一個既屬于BOM又屬于DOM的對象。從BOM角度看,document對象由一系列集合構成,這些集合可以訪問文檔的各個部分。
### 四、區別

DOM描述了處理網頁內容的方法和接口,BOM描述了與瀏覽器進行交互的方法和接口。
### 五、學習心得
1、一字之差,結果相差甚遠,作為代碼的耕耘者,一定要仔細認真的對待每一個字母。
2、隨著社會進步,軟件的更新換代也在加速,從原來的無標準到現在的標準健全,是一種質的飛躍。
3、即使身在同一個領域,也有不同的側重點。