javascript的BOM又是什么_它和DOM有什么区别?

BOM是浏览器对象模型,核心为window对象,用于操作浏览器环境;DOM是文档对象模型,面向HTML/XML文档,提供节点操作接口;二者标准性不同,DOM有W3C统一标准,BOM无官方标准。

BOM 是 Browser Object Model(浏览器对象模型),它不是一套标准,而是浏览器提供的一组用于操作浏览器窗口及环境的对象集合。它的核心是 window 对象,所有其他 BOM 对象(如 locationhistorynavigatorscreenlocalStorage)都是它的属性或子对象。

DOM 是操作文档的,BOM 是操作浏览器的

DOM(Document Object Model)面向的是 HTML 或 XML 文档本身,把页面结构抽象成树形节点,让你能查、改、删、增元素和样式。比如:
document.getElementById() 获取一个 div
element.style.color = "red" 改变文字颜色
document.createElement("p") 创建新段落

而 BOM 面向的是浏览器这个“运行容器”,比如:
window.open() 打开新窗口
location.href = "/login" 跳转页面
history.back() 返回上一页
navigator.userAgent 读取浏览器类型

DOM 有统一标准,BOM 没有

DOM 是 W3C 制定的正式标准,所有现代浏览器实现高度一致。
BOM 没有官方标准,各浏览器基本都支持 windowlocation 等核心对象,但某些方法或属性(尤其是早期 IE 的扩展,如 ActiveXObject)可能只在特定浏览器中存在。

这意味着 DOM 代码通常跨浏览器更稳;BOM 代码在用到非通用功能时,需要做兼容性判断。

window 是 BOM 的入口,也是 DOM 的宿主

window 是 BOM 的顶层对象,同时它又自带 document 属性——这个 document 就是 DOM 的根节点。
所以:
window.document 是 DOM 的起点
window.location 是 BOM 的一部分
– 你可以省略 window. 直接写 documentlocation,因为它们默认挂载在全局作用域

注意:虽然 documentwindow 的属性,但它属于 DOM 规范;window 本身不属于 JavaScript 语言内置对象,而是由浏览器注入的 BOM 对象。

常见混淆点澄清

alert()confirm()setTimeout() 都是 window 的方法,属于 BOM
document.querySelector()element.classList.add() 属于 DOM
localStorage.setItem() 是 Web Storage API,虽常被归入广义 BOM,但其实是独立标准(HTML5 规范),只是通过 window 暴露
fetch()XMLHttpRequest 不属于 BOM 或 DOM,它们是独立的网络 API