90% 前端新手搞不懂的底层逻辑:DOM、BOM 到底是什么?看完彻底通透
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
很多前端新手学了很久 HTML、CSS、JavaScript,能写出漂亮的页面、实现简单的点击交互,但始终有一个疑问:我写的标签、样式、脚本,浏览器到底是怎么识别、怎么渲染、怎么运行的? 为什么 答案藏在前端两大底层核心里:DOM(文档对象模型) 和 BOM(浏览器对象模型) 。 如果把前端页面比作一座房子,HTML 是砖瓦、CSS 是装修、JS 是家电开关,那 DOM 和 BOM 就是支撑整栋房子的两大承重骨架—— 两棵看不见、却贯穿所有功能的「大树」。 今天这篇文章,用大白话 + 生活化比喻,从零讲透 DOM、BOM 的概念、结构、区别、协作逻辑,零基础也能彻底看懂前端页面的底层运行规则。 一、先搞懂核心前提:浏览器是如何解析网页的?当我们在浏览器输入网址、按下回车,或者打开本地 HTML 文件时,浏览器会执行一套固定流程:
而这两棵核心的「树」,就是我们今天的主角:DOM 树 和 BOM 树。简单一句话总结:
下面我们逐个拆解,搭配示意图理解更轻松。 DOM 树结构示意图
二、第一棵大树:DOM 文档对象模型 —— 页面的「骨架树」1. 什么是 DOM?通俗比喻DOM 全称:Document Object Model,文档对象模型。 生活化比喻把整个网页当成一本厚厚的书(Document 文档):
没有 DOM,JS 就像盲人摸象,根本无法操作页面上的任何元素。 2. DOM 树的结构:天生的层级树形浏览器解析 HTML 后,会自动生成一棵唯一的 DOM 树,它有严格的父子、兄弟层级关系,永远遵循一套规则:
举个极简 HTML 例子:浏览器解析后,会转换成标准 DOM 树: 3. DOM 能做什么?前端日常开发全靠它我们写的 90% 页面交互,本质都是操作 DOM 树:
4. 新手必记:DOM 的核心特点
BOM 树结构示意图
三、第二棵大树:BOM 浏览器对象模型 —— 浏览器的「控制中枢」学完管页面的 DOM,再来理解管浏览器的 BOM,就非常简单了。 1. 什么是 BOM?通俗比喻BOM 全称:Browser Object Model,浏览器对象模型。 生活化比喻如果 DOM 是「房子内部的家具、墙体」,那 BOM 就是整栋房子所在的「小区物业 + 配套设施」:它不管理页面里的文字、按钮、图片,而是管理浏览器这个软件本身:浏览器窗口、地址栏、前进 / 后退按钮、弹窗、滚动条、浏览器版本、屏幕尺寸等等。 简单说:DOM 对内(页面),BOM 对外(浏览器) 。 2. BOM 树的结构:以 window 为根的全局树BOM 的根节点是 BOM 树核心分支(日常开发高频使用):
3. BOM 能做什么?日常开发场景举例弹出提示框、确认框: |
| 对比项 | DOM(文档对象模型) | BOM(浏览器对象模型) |
|---|---|---|
| 管理对象 | 网页文档、HTML 元素 | 浏览器窗口、浏览器功能 |
| 根节点 | document | window |
| 核心作用 | 操作页面内容、结构、样式、事件 | 操作浏览器窗口、地址、历史、弹窗 |
| 所属范围 | 页面内部 | 页面外部(浏览器) |
| 代表语法 | getElement、innerText、addEventListener | alert、location、history、setTimeout |
这是两者最关键的连接点:document(DOM 根节点)是 window(BOM 根节点)的一个属性。完整链路:window.document → DOM树(所有页面元素)
这也是为什么我们写 document.querySelector() 就能直接使用的原因。
结合「点击按钮弹出弹窗」这个最基础的交互,拆解完整底层流程,看懂就彻底通透:
HTML 代码:
<button id="btn">点击我</button>
JS 代码:
// 1. 通过 DOM 找到页面按钮(操作DOM树)
const btn = document.getElementById('btn');
// 2. 给按钮绑定点击事件(DOM 事件能力)
btn.onclick = function(){
// 3. 点击后调用弹窗(操作 BOM 能力)
alert('按钮被点击了!');
}
浏览器加载 HTML,生成 DOM 树,按钮是 DOM 树上的一个节点;
JS 通过 document(DOM)找到这个按钮节点;
监听按钮的点击行为(DOM 交互);
用户点击按钮,触发函数;
函数里调用 alert(),这是 BOM(window) 提供的弹窗功能;
浏览器弹出窗口,完成一次完整交互。
总结协作逻辑:
JS 借助 DOM 拿到页面元素、监听用户操作,再借助 BOM 调用浏览器能力,最终实现完整交互。
前端所有复杂交互(跳转页面、滚动监听、表单提交、弹窗组件),底层全是这套逻辑的延伸。
document、元素获取、修改样式 → DOM
alert、location、history、定时器 → BOM
因为 DOM 树还没解析完成。HTML 从上到下加载,如果 JS 写在页面头部,执行 JS 时下方的标签还没生成 DOM 节点,自然获取不到。解决方案:把 JS 写在 </body> 标签之前,或者使用页面加载事件。
会。DOM 是页面的实时映射,只要修改 DOM 节点的内容、样式,浏览器会立刻重新渲染页面。
很多前端学习者停留在「会写代码、会抄代码」的阶段,遇到诡异 bug、兼容问题就束手无策,本质就是不了解底层的 DOM 和 BOM。
DOM 和 BOM 不是枯燥的理论,而是前端世界的「底层规则」:
学会 DOM,你才算真正理解「如何操控页面」;
学会 BOM,你才算真正理解「如何和浏览器打交道」。
往后学习 Vue、React、小程序等框架,框架本质也是对 DOM 做了二次封装,底层逻辑依旧没变。
希望这篇文章能帮你拨开迷雾,从「只会写代码」进阶到「懂底层逻辑」,前端之路也会越走越顺畅!