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 可以显著提升页面的可用性和交互体验。