# DOM和BOM的区别 在浏览器中运行的`JavaScript`可以认为由三部分组成:`ECMAScript`描述了该语言的语法和基本对象,`DOM`文档对象模型描述了处理网页内容的方法和接口,`BOM`浏览器对象模型描述了与浏览器进行交互的方法和接口。 ## DOM * `DOM`是`Document Object Model`的缩写,即文档对象模型。 * `DOM`是`W3C`的标准。 * `DOM`最根本对象是`document`,即`window.document`。 `DOM`全称是`Document Object Model`即文档对象模型,是针对`XML`的基于树的`API`,描述了处理网页内容的方法和接口,是`HTML`和`XML`的`API`,`DOM`把整个页面规划成由节点层级构成的文档。`DOM`和文档有关,这里的文档指的是网页,也就是`HTML`文档。网页是由服务器发送给客户端浏览器的,无论用什么浏览器,接收到的`HTML`都是一样的,所以`DOM`和浏览器无关,其关注的是网页本身的内容,由于是相对独立于浏览器的,所以可以制定标准。 `DOM`定义了`Node`等对象做为这种实现的基础,就是说为了能以编程的方法操作这个`HTML`的内容,例如添加元素、修改元素、删除元素等,我们把这个`HTML`结构看做一个对象树`DOM`树,其本身和里面的所有东西例如`
`这些标签都看做一个对象,每个对象都叫做一个节点`Node`,节点可以理解为`DOM`中所有`Object`的父类。 ## BOM * `BOM`是`Browser Object Model`的缩写,即浏览器对象模型。 * `BOM`没有相关标准。 * `BOM`的最根本对象是`window`。 `BOM`是`Browser Object Model`即浏览器对象模型,`DOM`是为了操作文档出现的接口,而`BOM`就是为了控制浏览器的行为而出现的接口,例如跳转页面、前进、后退、书签等等,程序还可能需要获取屏幕的大小之类的参数,所以`BOM`就是为了解决这些事情出现的接口,例如我们要让浏览器跳转到另一个页面就需要`Location`对象。 由于没有标准,不同的浏览器实现同一功能,可以需要不同的实现方式,所以对于上面说的功能,不同的浏览器的实现功能所需要的`JavaScript`代码可能不相同。虽然`BOM`没有一套标准,但是各个浏览器的常用功能的`JavaScript`代码还是大同小异的,对于常用的功能实际上已经有默认的标准了,所以不用过于担心浏览器兼容问题,不是每个浏览器都有自己的`BOM`,也不需要为每个浏览器都学习一套`BOM`,只是个别浏览器会有新增的功能会在`BOM`上体现出来。 ## 每日一题 ``` https://github.com/WindrunnerMax/EveryDay ``` ## 参考 ``` https://www.zhihu.com/question/20724662 https://juejin.cn/post/6844903939008102413 https://blog.csdn.net/xiao__gui/article/details/8315148 ```