JavaScript中的BOM(Browser Object Model)和DOM(Document Object Model)是用于不同目的的API,以下是它们的核心区别和用途的总结:
用途:与浏览器窗口交互,控制浏览器行为,而非页面内容。
核心对象:
window
**:顶层对象,代表浏览器窗口。open()
, close()
, alert()
, setTimeout()
innerWidth
, innerHeight
, location
navigator
**:提供浏览器信息(如用户代理)。userAgent
, platform
location
**:管理当前URL。reload()
, assign()
href
, search
history
**:操作浏览历史。back()
, pushState()
screen
**:获取屏幕信息。width
, height
特点:
用途:操作HTML/XML文档的结构和内容。
核心对象:
document
**:页面入口,提供访问和修改元素的API。getElementById()
, querySelector()
, createElement()
click
, keydown
, submit
div
, p
):通过DOM方法操作属性、样式和内容。innerHTML
, className
appendChild()
, setAttribute()
特点:
特性 | BOM | DOM |
---|---|---|
作用对象 | 浏览器窗口/行为 | 文档内容/结构 |
标准 | 无统一标准 | W3C标准 |
核心对象 | window , location |
document , 元素节点 |
典型操作 | 弹窗、导航、调整窗口大小 | 修改元素、事件处理、动态内容 |
调整布局响应窗口变化:
window.addEventListener('resize', () => {
const width = window.innerWidth; // BOM
document.getElementById('container').style.width = `${width}px`; // DOM
});
单页应用导航:
// BOM:管理历史记录
history.pushState({ page: 1 }, 'Page 1', '/page1');
// DOM:动态更新内容
document.getElementById('content').innerHTML = '<h1>New Page</h1>';
window
对象:既是BOM的入口,也是DOM的全局宿主(如window.document
)。document.cookie
**:属于DOM,但操作与浏览器(BOM)行为相关。window.onload
(BOM)与element.onclick
(DOM)。通过区分BOM和DOM的职责,开发者能更高效地控制浏览器行为和页面内容,构建交互丰富的Web应用。