DOM,全称 Document Object Model(文档对象模型),就是把「文档」当做一个「对象」来看待。
BOM,全称 Browser Object Model(浏览器对象模型),即把「浏览器」当做一个「对象」来看待。
在 DOM 中,文档中的各个组件(component),可以通过 object.attribute 这种形式来访问。一个 DOM 会有一个根对象,这个对象通常就是 document。
而 BOM 除了可以访问文档中的组件之外,还可以访问浏览器的组件,比如问题描述中的 navigator(导航条)、history(历史记录)等等。
在这种 「XOM」的模型中,最应该理解的就是 Object Model。Object Model 就表示你可以通过像操作对象一样,来操作这个 X。
再解释一下什么是对象(Object)。
在编程领域中,对象就是指的一种拥有具体数据(Data)并且具有(并不总是)特定行为(Behavior)的东西。例如,一个人 ,就可以看做一个对象。人的年龄、性别、身高、体重就是上文说的具体「数据」,通常将对象拥有的具体数据称作对象的「属性(Attribute)」;而人吃饭,睡觉,行走等能力,就是上文所说的「行为」,通常,我们把对象的行为称作对象的「方法(Method)」。另外,对象是可以嵌套的,也就是是说,一个对象的属性也可以是对象。
上文所说的「像操作对象一样」,最主要就是指访问对象的属性和调用对象的方法。对象的属性可以通过 object.attribute 这种形式来访问,对象的方法可以通过 object.method(arguments) 这种形式来调用。
对应到 DOM 中,document 这个根对象就有很多属性,例如 title 就是 document 的一个属性,可以通过 document.title 访问;document 对象也有很多方法,例如 getElementById,可以通过 document.getElementById(nodeId) 调用。
总而言之
Dom相当于把html页面结构解析成一个对象,提供一个接口API,让你去操作所有的节点。其实就是document对象,没发现所有的页面元素选择基本上都是从document衍生出来的嘛。
此外,Bom基本上就是指当前窗口对象,就是window对象了。你看document也是挂在window对象了。什么关于窗口的一些东西都是挂在window的了,比如alert之类的。