【js篇】什么是 DOM 和 BOM?前端开发的核心模型解析

171 阅读3分钟

在 Web 开发中,DOMBOM 是两个最基础、最重要的概念。它们是 JavaScript 能够操作网页内容和与浏览器交互的基石。


✅ 一句话总结

DOM(文档对象模型) 是将 HTML 文档结构化为对象,用于操作网页内容;BOM(浏览器对象模型) 是将浏览器功能抽象为对象,用于与浏览器进行交互。window 对象是 BOM 的核心,同时也是 JavaScript 的全局对象。


✅ 一、DOM:文档对象模型(Document Object Model)

🔹 定义:

DOM(Document Object Model)是 HTML 和 XML 文档的编程接口。它将整个页面映射为一个层次化的节点树,每个节点都是一个对象,可以通过 JavaScript 进行访问和操作。

🔹 核心思想:

  • 将 HTML 文档视为一个对象树
  • 每个 HTML 标签、文本、属性都对应一个节点对象
  • 提供 API(方法和属性)来增删改查这些节点;

🔹 主要功能:

功能示例方法
查找元素document.getElementById()querySelector()
创建元素document.createElement()
修改内容element.innerHTMLtextContent
操作属性element.setAttribute()getAttribute()
事件处理element.addEventListener()
样式控制element.style.colorclassList

🔹 示例:

// 修改页面标题
document.title = "新标题";

// 获取元素并修改内容
const heading = document.querySelector("h1");
heading.textContent = "Hello, DOM!";

✅ 二、BOM:浏览器对象模型(Browser Object Model)

🔹 定义:

BOM(Browser Object Model)是 浏览器提供的用于与浏览器窗口进行交互的 API 集合。它没有官方标准,但被所有浏览器实现。

🔹 核心对象:window

window 是 BOM 的核心对象,具有双重身份:

  1. 浏览器窗口的全局接口:代表浏览器窗口;
  2. JavaScript 的全局对象:所有全局变量、函数都属于 window
var globalVar = "I'm global";
function globalFunc() { return "Hello"; }

console.log(window.globalVar); // "I'm global"
console.log(window.globalFunc()); // "Hello"

🔹 BOM 的主要子对象

对象作用
window全局对象,窗口本身
documentDOM 的入口,操作页面内容
location管理 URL,实现跳转、刷新
navigator获取浏览器信息(用户代理、语言等)
screen获取屏幕信息(分辨率、颜色深度)
history管理浏览历史(前进、后退)
localStorage / sessionStorage本地数据存储
console控制台输出
alert() / confirm() / prompt()弹窗交互

🔹 示例:

// 跳转页面
window.location.href = "https://example.com";

// 获取浏览器信息
console.log(navigator.userAgent);

// 前进一页
history.forward();

// 弹出确认框
const isConfirmed = confirm("确定要删除吗?");

✅ 三、DOM 与 BOM 的关系图

        +-----------------+
        |     window      |  ← BOM 核心(全局对象)
        +-----------------+
           |      |      |
           |      |      +------------------+
           |      |                         |
           |      +------------+            |
           |                   |            |
    +-------------+    +--------------+    |
    |  document   |    |   location   |    |  ... 其他 BOM 对象
    +-------------+    +--------------+    |
           |                               |
           |                               |
    +--------------+                       |
    |   DOM Tree   | ← HTML 文档结构化    |
    +--------------+                       |
                                           |
                                +------------------+
                                |     navigator    |
                                +------------------+

关键点document 对象既是 DOM 的入口,也是 window 对象的属性,体现了 DOM 与 BOM 的紧密联系。


✅ 四、一句话总结

DOM 是操作网页内容的模型,BOM 是操作浏览器功能的模型。window 是 BOM 的核心,也是 JavaScript 的全局对象,它包含了 documentlocationnavigator 等关键对象,是前端开发与浏览器交互的桥梁。


💡 进阶建议

  • 所有未使用 var/let/const 声明的变量都会自动成为 window 的属性;
  • 避免污染全局命名空间,使用模块化或 IIFE;
  • window 对象的方法(如 alertsetTimeout)可以直接调用;
  • 在 Node.js 环境中,没有 window 对象,但有类似的全局对象 global
  • 使用 this 在全局作用域中指向 window(非严格模式);