【每日一题】JavaScript基础|什么是DOM和BOM?
DOM(Document Object Model,文档对象模型)
什么是DOM?
DOM是文档内容在编程语言上的抽象模型,他建模了文档的内容和结构,并提供给编程语言一套完整的操纵文档的API
为什么会出现DOM?
在JS诞生之前,网站的静态的,浏览器不需要对文档内容进行修改,直接对文档内容进行解析之后就不用管他了,因为没有JS的存在,文档内容是不可能发生变化的,在这个时候即没有JS也没有DOM。
JS出现之后,JS可能会对文档内容进行修改,并且浏览器需要即使对这份修改进行体现。因此,浏览器中解析文档之后,还需要对文档内容进行“监视”。在没有DOM的情况下,浏览器无法得知修改的是哪一部分的内容,因此,只能在“监听”到文档内容被修改后,重新解析加载页面,这无疑对性能的一种浪费,同时在加载期间,用户也会产生一段时间的白屏,即使这段时间很短,也必然会产生“闪屏”。
综上,DOM的出现是很有必要的。那么DOM又做了哪些事呢?
DOM做了什么?
- 在浏览器里,浏览器首次解析加载一个文档时,把文档中的标签解析成一个一个的节点,父元素和子元素用线连接,整个文档最终形成一个称为DOM树的树形结构。浏览器再根据DOM树去呈现页面,并且会跟踪DOM的变化,一旦DOM树发现变化,页面也会做出相应改变。
- 在JS里,DOM树也是存在于JS环境里的,因此,在JS中,原本对文档的修改现在只用修改DOM树中对应的节点就可以了。并且,DOM节点对象是普通的JS对象,有各种易于我们操作DOM树的方法和属性,因此,在JS中操作文档就跟操作对象一样便携。并且浏览器也会知道你修改了哪个节点,这样,只需要重新渲染被修改影响的局部页面就好了,即发生回流或重绘。
- 后来,DOM组件发展成为一套不依托于浏览器和JS的独立规范,提供了一套完整的访问和修改文档的接口,这些API在浏览器中被广泛使用,不过,也支持python等其他。DOM标准由W3C维护,目前版本DOM 4。
什么是DOM!
- 对浏览器来说,是一个根据文档建模出来的一个树形模型,即DOM树。
- 对JS(或其他支持DOM的编程语言)来说,DOM提供一套操作文档的API。
BOM(Browser Obejct Model,浏览器对象模型)
指的是浏览器对象模型,他指的是把浏览器当作一个对象来对待,使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。 使 JavaScript 有能力与浏览器"对话",这个对象主要定义了与浏览器进行交互的方法和接口。BOM的核心是window,而window对象具有双重角色,他既是JS访问浏览器窗口的一个接口,有是一个全局对象。这意味着在网页中定义的任何对象、变量和函数,都作为全局对象的一个属性或方法存在。window对象含有location对象、navigator对象、screen对象等子对象,并且DOM的最根本的对象document对象也是BOM的window对象的子对象。