DOM、BOM、DOM操作详解 + 结合Vue响应式关联梳理

DOM、BOM、DOM操作详解 + 结合Vue响应式关联梳理

一、基础概念区分

1. BOM(Browser Object Model 浏览器对象模型)

定义 :浏览器提供的、用来操作浏览器窗口本身 的API,核心宿主是window,脱离HTML文档,只管浏览器窗口。

  • 核心对象:window(顶级对象)
  • 常用成员:
    • 窗口控制:window.open/close/resize
    • 地址:location(跳转、获取地址、刷新)
    • 历史记录:history(前进、后退、history路由)
    • 设备信息:navigator(浏览器、系统)
    • 弹窗、定时器:alert/setTimeout/setInterval
  • 特点:和页面DOM节点无关,只操控浏览器外壳。

2. DOM(Document Object Model 文档对象模型)

定义 :浏览器把HTML文档解析为树形JS对象,把标签、文本、属性抽象成节点树,提供API用来操作页面标签内容。

  • 根对象:document,隶属于window;
  • 结构:DOM树 = 根节点→元素节点、文本节点、属性节点、注释节点;
  • 核心作用:页面结构、内容、样式的增删改查

3. DOM操作

所有通过DOMAPI修改页面节点的行为,统称为DOM操作,分为4大类:

  1. 查询getElementByIdquerySelectorchildrenparentNode
  2. 增删createElementappendChildremoveChild
  3. 修改内容innerTextinnerHTMLtextContent
  4. 修改属性样式setAttributeclassListstyle
原生DOM痛点

频繁DOM操作会重排(回流)、重绘 ,浏览器渲染开销大,页面卡顿; 原生JS开发需要手动频繁操作DOM,Vue/React核心目的就是减少手动DOM操作

二、DOM、BOM、DOM操作 简单对比总结

类别 管控范围 顶级对象 典型用途
BOM 浏览器窗口 window 页面跳转、定时器、路由历史
DOM HTML页面文档 document 标签增删改查、页面渲染
DOM操作 调用DOMAPI document 手动修改页面视图

三、Vue响应式中,DOM/BOM/DOM操作的关联与运用

Vue响应式的最终目的:数据驱动视图,本质就是:数据变化 → 自动执行DOM操作更新页面,不再手动写DOM代码。

1. 响应式闭环最终落地:DOM操作

  1. 初始化 data做响应式劫持 → 执行渲染函数(render) render函数内部会调用虚拟DOM,转换成真实DOM,挂载到页面(DOM插入操作)。
  2. 依赖收集 读取数据触发get,收集渲染副作用函数,这个函数本质就是生成DOM、更新DOM的逻辑
  3. 数据更新 修改数据触发set/Proxy拦截 → 触发trigger/notify → 执行渲染函数 → 对比新旧VNode → 打补丁patch执行批量DOM操作修改页面。

核心结论:响应式只是数据监听手段,视图更新的最后一步一定是DOM操作,Vue只是封装、自动化了DOM操作。

2. Vue中关键DOM相关机制

(1)虚拟DOM(VNode)

原生频繁DOM操作性能差,Vue用JS对象描述DOM结构(虚拟DOM):

  • 数据更新后,先生成新VNode,和旧VNode做diff对比;
  • 只找出差异节点,最小化DOM修改,减少回流重绘;
  • diff算法的输出结果,就是精准的DOM增删改指令。
(2)patch 补丁函数

diff对比完成后,patch专门执行真实DOM操作: 新增节点→appendChild、删除节点→removeChild、修改内容→innerHTML、移动节点等。

(3)模板编译

.vue模板编译为render函数,render函数返回VNode,是DOM的JS描述体。

(4)异步更新&nextTick
  1. 短时间多次修改数据,不会立刻执行DOM操作,Vue存入异步队列防抖;
  2. 等同步代码执行完毕,统一执行一次patch批量DOM渲染;
  3. $nextTick:DOM更新完成后执行回调,用来获取最新DOM节点,是DOM操作常用API。

3. BOM在Vue中的使用场景(和响应式无直接绑定,但高频搭配)

  1. 路由:historylocation实现hash/history路由;
  2. 定时器:setTimeout搭配防抖节流监听数据;
  3. 窗口监听:window.resize结合响应式数据做自适应; BOM属于浏览器环境API,不属于响应式核心流程,只是业务常用工具。

4. 响应式体系里,哪些环节直接接触DOM操作

  1. 首次挂载mount:新建DOM、插入DOM;
  2. 更新渲染patch:diff后增删改DOM;
  3. 指令 :v-show、v-if、v-bind、v-text内部都是DOM操作;
    • v-if:创建/销毁DOM
    • v-show:修改display样式
    • v-text:修改元素文本
  4. ref:直接获取DOM元素,用于手动DOM操作;
  5. 生命周期: mounted:DOM已挂载,可操作DOM; updated:DOM更新完毕。

5. 为什么响应式能省去手动DOM操作?

  1. 开发者只修改JS数据;
  2. 响应式监听数据变化;
  3. 框架自动执行render→diff→patch;
  4. 框架自动完成DOM增删改; 全程不需要开发者手写appendChild、querySelector等原生代码。

四、补充易错点

  1. 响应式 ≠ DOM操作:响应式管数据监听 ,DOM操作管视图修改,前者是前提,后者是结果;
  2. Vue不能完全脱离DOM:框架只是封装,底层视图更新依旧依赖DOMAPI;
  3. Vue2 Object.defineProperty、Vue3 Proxy只做数据劫持,本身不操作DOM,只是通知渲染函数去更新DOM。
相关推荐
DS随心转插件20 分钟前
Grok生成的html怎么导出——AI导出鸭:大模型结构化输出的“最后一公里”工程化解构
前端·人工智能·ai·html·豆包·deepseek·ai导出鸭
এ慕ོ冬℘゜33 分钟前
使用 jQuery 动态渲染表格与状态切换
前端·javascript·jquery
人间凡尔赛1 小时前
2026 前端必修:4 个让 CSS 脱胎换骨的现代新特性(附实战代码)
前端·css
用户2181697049301 小时前
Flutter (二十) 轮播图
前端
前端snow1 小时前
ai agent - RAG 汇总
前端
计算机魔术师2 小时前
AI为拿高分不惜入侵网站:22个模型作弊审计,真相让人背脊发凉
前端
晓说前端2 小时前
TypeScript 核心语法应用 —— Vue 3 中的使用(下)
前端·javascript·typescript·类型系统
zhangminghuan2 小时前
微信小程序开发核心知识点全景解析(前端必备硬核基础)
前端·微信小程序·小程序
boooooooom2 小时前
尝尝咸淡:从朴素 RAG 到 Graph RAG——一个烹饪问答系统的三层检索升级之路
前端·后端·llm
cindershade3 小时前
让每条前端异常都能回答:该由谁修、为什么现在修
前端