「JavaScript」DOM BOM

84 阅读4分钟

DOM

定义

面试官:什么是DOM?为什么需要DOM?

DOM, (Document Object Model, 文档对象模型)是文档内容(HTMLXML)在编程语言上的抽象模型,它建模了文档的内容和结构,并提供给编程语言一套完整的操纵文档的API

为什么需要 DOM

没有 DOM 的时候,浏览器每次都按照文档内容(HTMLXML)进行渲染,文档内容不会变化,当 JS出现时,JS会修改文档内容,这就暴露出了问题。

  • 首先,在JS中处理庞大的html文本,必然繁琐且错漏百出,没人愿意这么做。
  • 即使,在JS这方面,你真的很厉害,完全胜任了这个工作,浏览器表示它不干了,刚刚把一个大页面解析好,发现JS修改了它,可是根本无法知道修改了哪里,只能重新解析整个页面,即使这个修改只是添加了一个空格,页面内容根本没有发生变化,这种性能的浪费不言而喻。
  • 再退一步,前面一切安好,在用户看来,每次修改文档,浏览器重新解析,页面必然一段时间白屏,解析时间快可能是闪屏,这种体验不如放弃修改页面。

有了 DOM 之后

  • 在浏览器方面,浏览器首次解析文档时,把文档中的标签(文本等)解析成一个个节点,父元素与子元素(或文本)用线连接,整个文档最终形成一个称为DOM树的树形结构。浏览器再根据DOM树去呈现页面。浏览器会跟踪DOM树的变化,一旦DOM树变化,页面也会做出相应变化。
  • 巧妙的是,DOM树在JS环境中也是存在的(JS执行引擎是浏览器的一部分),所以,在JS中,原本对文档的修改现在只需要修改DOM树和其中的节点就好了。DOM节点对象是普通的JS对象,有易于操作的方法和属性,这样,在JS操纵文档就好像操作对象一样方便快捷。而且,浏览器会知道你修改了哪个节点,这样,只需要重新渲染被修改影响的局部页面就好了(即发生回流重绘)。

DOM组件发展成为一套不依托于浏览器和JS的独立规范,提供了一套完整的访问和修改文档的接口,这些API在浏览器中被广泛使用,

总结

所以DOM这个名词应该有两层含义,第一个是根据文档建模出来的一个树形模型,即是DOM树,这是站在浏览器方面的看法。从编程语言来看,它提供了一套操纵文档的API。

BOM

JavaScript高程笔记 —— BOM

定义

BOMBrowser Object Model,浏览器对象模型。刚才说过 DOM 是为了操作文档出现的接口,那 BOM 顾名思义其实就是为了控制浏览器的行为而出现的接口。

由什么组成

  1. window表示浏览器实例
  2. location加载文档的信息和常用导航功能实例
  3. navigator客户端标识和信息的对象实例
  4. screen客户端显示器信息
  5. history当前窗口建立以来的导航历史记录

window

ES中的全局作用域和浏览器窗口的JavaScript接口

  • window 对象的 top 属性始终指向最外层的窗口,及浏览器窗口本身。
  • window 对象的 parent 属性始终指向当前窗口的父窗口,如果当前窗口就是最外层窗口,则 top 等于 parent
  • window 对象的 self 属性始终指向自身。

location

是最有用的 BOM 对象之一,提供了当前窗口中加载文档的信息,以及通常的导航功能。

它既是 window 的属性,也是 document 的属性。即 window.location 和 document.location 指向同一个对象。

navigator

客服端标识浏览器的标准,主要用来记录和检测浏览器与设备的主要信息,也可以让脚本注册和查询自己的一些活动(插件)。

screen

单纯的保存客服端能力的对象。包含以下属性:

image.png

history

浏览器导航历史记录及相关操作的对象。