引言:
BOM 操作是 JavaScript 与浏览器窗口及环境交互的接口,涵盖窗口控制、页面导航、历史管理、浏览器信息、本地存储等完整能力。本文系统讲解 window、location、history、navigator 等核心 BOM 对象的属性与方法。
JavaScript BOM 操作详解
当你使用 JavaScript 开发网页应用时,除了操作页面内容(DOM),还需要与浏览器本身 进行交互。BOM(Browser Object Model,浏览器对象模型) 就是 JavaScript 与浏览器对话的接口。
BOM 提供了操作浏览器窗口、历史记录、导航信息、屏幕属性等能力。与 DOM 不同,BOM 没有统一的标准,不同浏览器可能在细节上有所差异,但核心对象已被所有现代浏览器广泛支持。
一、什么是 BOM?
BOM 是浏览器提供的对象集合,用于访问和操作浏览器窗口及浏览器功能。它的核心是 window 对象,所有 BOM 对象和方法都从属于它。
BOM 主要包括以下核心对象:
对象
说明
window
浏览器窗口,BOM 的顶层对象
navigator
浏览器信息(如名称、版本、用户代理)
location
当前页面的 URL 信息
history
浏览器的历史记录
screen
用户屏幕的信息
document
当前页面文档(DOM 的入口,实际上属于 DOM,但可通过 window.document 访问)
二、window 对象
window 是 BOM 的顶层对象,代表浏览器窗口或标签页。全局变量和全局函数都自动成为 window 对象的属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 var name = "张三" ;console .log (window .name ); function sayHello ( ) { console .log ("你好" ); } window .sayHello (); alert ("消息" ); setTimeout (() => {}, 1000 );
window 常用属性和方法
属性/方法
说明
window.innerWidth
浏览器窗口的可视宽度(包含滚动条)
window.innerHeight
浏览器窗口的可视高度
window.outerWidth
浏览器窗口的外部宽度(含工具栏等)
window.outerHeight
浏览器窗口的外部高度
window.screenX / window.screenY
窗口相对于屏幕左上角的坐标
window.open()
打开一个新窗口或标签页
window.close()
关闭当前窗口
window.alert()
弹出提示框
window.confirm()
弹出确认框(返回布尔值)
window.prompt()
弹出输入框(返回用户输入的字符串)
window.print()
打开打印对话框
window.scrollTo(x, y)
滚动到指定位置
window.scrollBy(x, y)
相对于当前位置滚动
window.getComputedStyle()
获取元素最终计算的 CSS 样式
三、窗口大小与滚动
获取窗口尺寸
1 2 3 4 5 6 7 console .log (window .innerWidth ); console .log (window .innerHeight ); console .log (window .outerWidth );console .log (window .outerHeight );
控制窗口滚动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 window .scrollTo (0 , 0 );window .scrollTo (100 , 200 );window .scrollTo ({ top : 0 , left : 0 , behavior : 'smooth' }); window .scrollBy (0 , 100 );let scrollX = window .pageXOffset ; let scrollY = window .pageYOffset ; let scrollX = window .scrollX ;let scrollY = window .scrollY ;
四、定时器
JavaScript 提供了两种定时器方法,用于在指定时间后执行代码。
1. setTimeout 与 clearTimeout
在指定的延迟时间(毫秒)后执行一次函数。
1 2 3 4 5 6 7 let timerId = setTimeout (function ( ) { console .log ("3秒已到!" ); }, 3000 ); clearTimeout (timerId);
2. setInterval 与 clearInterval
每隔指定的时间间隔重复执行函数。
1 2 3 4 5 6 7 8 9 10 11 let count = 0 ;let intervalId = setInterval (function ( ) { count++; console .log (`已运行 ${count} 秒` ); if (count >= 10 ) { clearInterval (intervalId); console .log ("定时器已停止" ); } }, 1000 );
五、对话框
JavaScript 提供了三种内置对话框,用于与用户进行简单交互。
1. alert —— 提示框
显示一条信息,用户只能点击"确定"关闭。
2. confirm —— 确认框
显示信息并提供"确定"和"取消"按钮,返回布尔值。
1 2 3 4 5 6 let isConfirmed = confirm ("确认删除此条目吗?" );if (isConfirmed) { console .log ("用户确认删除" ); } else { console .log ("用户取消操作" ); }
3. prompt —— 输入框
显示输入框,让用户输入内容,返回输入的字符串,点击取消则返回 null。
1 2 3 4 5 6 let name = prompt ("请输入您的姓名:" );if (name !== null ) { console .log (`你好,${name} !` ); } else { console .log ("用户取消了输入" ); }
六、location 对象
location 对象包含了当前页面的 URL 信息,既可以读取也可以修改。
location 的属性
1 2 3 4 5 6 7 8 9 console .log (location.href ); console .log (location.protocol ); console .log (location.host ); console .log (location.hostname ); console .log (location.port ); console .log (location.pathname ); console .log (location.search ); console .log (location.hash ); console .log (location.origin );
location 的方法
1 2 3 4 5 6 7 8 9 10 11 location.href = "https://example.com" ; location.assign ("https://example.com" ); location.reload (); location.reload (true ); location.replace ("https://example.com" );
URLSearchParams —— 解析查询参数
使用 URLSearchParams 可以方便地解析和处理 URL 中的查询参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 let params = new URLSearchParams (location.search );let id = params.get ('id' ); let name = params.get ('name' ); let active = params.get ('active' ); if (params.has ('id' )) { console .log ('存在 id 参数' ); } params.forEach ((value, key ) => { console .log (`${key} : ${value} ` ); }); params.set ('page' , '2' ); params.append ('sort' , 'desc' ); console .log (params.toString ());
七、history 对象
history 对象用于操作浏览器的会话历史记录,可以实现页面间的前进、后退和跳转。
history 的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 history.back (); history.forward (); history.go (-2 ); history.go (1 ); history.go (0 ); console .log (history.length );
pushState 与 replaceState —— 修改历史记录
pushState 和 replaceState 可以在不刷新页面的情况下修改浏览器的 URL 和历史记录,是单页应用(SPA)路由的核心技术。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 history.pushState ( { page : 2 , userId : 123 }, "页面标题" , "/page/2" ); history.replaceState ( { page : 1 }, "新标题" , "/page/1" ); window .addEventListener ('popstate' , function (event ) { console .log ('历史状态改变:' , event.state ); });
八、navigator 对象
navigator 对象提供了关于浏览器的信息,常用于检测浏览器类型、操作系统、设备特性等。
navigator 的常用属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 console .log (navigator.userAgent );console .log (navigator.appName );console .log (navigator.appVersion );console .log (navigator.platform );console .log (navigator.language ); console .log (navigator.cookieEnabled );console .log (navigator.onLine );
检测设备与浏览器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 function isMobile ( ) { return /Mobi|Android|iPhone|iPad/i .test (navigator.userAgent ); } function getBrowser ( ) { let ua = navigator.userAgent ; if (ua.indexOf ('Chrome' ) > -1 ) return 'Chrome' ; if (ua.indexOf ('Firefox' ) > -1 ) return 'Firefox' ; if (ua.indexOf ('Safari' ) > -1 ) return 'Safari' ; if (ua.indexOf ('Edge' ) > -1 ) return 'Edge' ; return 'Unknown' ; }
九、screen 对象
screen 对象提供了用户屏幕的信息,可用于适配不同尺寸的显示设备。
1 2 3 4 5 6 7 8 9 10 11 12 13 console .log (screen.width );console .log (screen.height );console .log (screen.availWidth );console .log (screen.availHeight );console .log (screen.colorDepth );console .log (window .devicePixelRatio );
十、本地存储
BOM 提供了两种在浏览器中持久化存储数据的方式:localStorage 和 sessionStorage。
特性
localStorage
sessionStorage
生命周期
永久存储,除非手动清除
仅在当前会话有效,关闭标签页后清除
跨标签页
同源的所有标签页共享
仅当前标签页有效
容量
约 5-10 MB
约 5 MB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 localStorage .setItem ('username' , '张三' );sessionStorage .setItem ('theme' , 'dark' );let username = localStorage .getItem ('username' );let theme = sessionStorage .getItem ('theme' );localStorage .removeItem ('username' );sessionStorage .removeItem ('theme' );localStorage .clear ();sessionStorage .clear ();let user = { name : '张三' , age : 25 };localStorage .setItem ('user' , JSON .stringify (user));let storedUser = JSON .parse (localStorage .getItem ('user' ));
总结
BOM 是 JavaScript 与浏览器窗口和环境交互的桥梁。掌握 window、location、history、navigator、screen 以及本地存储等核心对象,可以让你更好地控制浏览器行为、管理页面导航、获取设备信息和存储用户数据。结合 DOM 操作,BOM 使你能够构建完整的、功能丰富的 Web 应用体验。在实际开发中,合理运用 BOM API 可以显著提升页面的可用性和交互体验。