JavaScript BOM 核心对象详解:window、location、history、navigator 与 screen
本文深入解析 JavaScript 浏览器对象模型(BOM)的核心组件。重点阐述 window 作为全局对象的角色,解析 location 对象的 URL 处理与导航功能,介绍 history 对象的页面历史记录管理,探讨 navigator 对象在浏览器识别中的应用,以及 screen 对象对客户端显示能力的检测。通过具体代码示例,帮助开发者掌握 BOM 在 Web 开发中的实际应用场景。
JavaScript BOM 概述
JavaScript 的 BOM
ECMAScript 构成了 JavaScript 的核心逻辑,但若要在 Web 环境中使用 JavaScript,BOM(浏览器对象模型)才是实际的核心所在。BOM 提供了大量用于访问浏览器功能的对象,这些功能独立于具体的网页内容。长期以来,由于缺乏统一的事实标准,BOM 的实现因各浏览器厂商的随意扩展而显得既有趣又复杂。因此,各浏览器共有的对象逐渐演变为事实上的标准。这些对象之所以存在,很大程度上是因为它们提供了与浏览器的互操作性。为了将 JavaScript 在浏览器中的基本部分标准化,W3C 已将 BOM 的主要方面纳入 HTML5 规范中。
注:以上内容摘自《JavaScript 高级程序设计》。BOM 本质上是浏览器的窗口对象,提供了诸多窗口处理相关的 API。随着 WebApp 框架的日益普及,开发者需要在同一窗口内处理不同页面及不同的 Ajax 数据,因此熟悉 BOM 的内容变得尤为重要。
window 对象:全局接口与核心
1、window
BOM 的核心对象是 window,它代表浏览器的一个实例。在浏览器环境中,window 对象具有双重身份:它既是通过 JavaScript 访问浏览器窗口的接口,也是 ECMAScript 规范中定义的 Global 对象。


以下是 open 方法的第三个字符串属性说明

location 对象:URL 解析与导航
2、location
location 是 BOM 中最为实用的对象之一,它提供了与当前窗口中加载文档相关的信息,并支持一些导航功能。事实上,location 对象非常特殊,因为它既是 window 对象的属性,也是 document 对象的属性;换言之,window.location 和 document.location 引用的是同一个对象。location 对象的用途不仅在于保存当前文档的信息,还在于它将 URL 解析为独立的片段,使开发人员可以通过不同的属性访问这些片段。

history 对象:历史记录管理
3、history
history 对象保存着用户的上网历史记录,从窗口打开的那一刻开始计算。由于 history 是 window 对象的属性,因此每个浏览器窗口、每个标签页乃至每个框架,都拥有与特定 window 对象关联的自己的 history 对象。出于安全考虑,开发人员无法得知用户浏览过的具体 URL。不过,借助用户访问过的页面列表,即使不知道实际 URL,也能实现后退和前进功能。

navigator 对象:浏览器识别
4、navigator
navigator 对象最早由 Netscape Navigator 2.0 引入,如今已成为识别客户端浏览器的事实标准。尽管其他浏览器也通过其他方式提供了相同或相似的信息(例如 IE 中的 window.clientInformation 和 Opera 中的 window.opera),但 navigator 对象是所有支持 JavaScript 的浏览器所共有的。与其他 BOM 对象一样,每个浏览器中的 navigator 对象都有一套自己的属性。下图列出了 navigator 中较为重要的信息。

screen 对象:显示能力检测
5、screen
JavaScript 中有几个对象在编程中用处不大,而 screen 对象便是其中之一。screen 对象主要用于表明客户端的能力,其中包括浏览器窗口外部显示器的信息,如像素宽度和高度等。每个浏览器中的 screen 对象都包含各不相同的属性,下表列出了所有属性及支持相应属性的浏览器。读者可以直接使用以下代码进行查看。
<!DOCTYPE html>
<html>
<head>
<script>
console.log(screen);
</script>
</head>
<body>
screen
</body>
</html>
D3.js 处理大规模数据点的性能优化策略
2026-11-05 15:37:25
JS实现网页摄像头实时扫码:结合getUserMedia与jsQR教程
2026-11-05 15:27:28
D3.js v5 迁移到 v7 的 API 变更与注意事项
2026-11-05 11:57:17
使用 animate.js 实现多元素协同的序列动画
2026-11-04 22:27:53
JS拖拽排序时怎么添加平滑动画效果?FLIP技术实战
2026-11-04 10:12:22
