JavaScript BOM 详细介绍

JavaScript BOM (Browser Object Model) 详细介绍

BOM (Browser Object Model) 是浏览器对象模型,它提供了与浏览器窗口交互的对象和方法,允许 JavaScript 与浏览器"对话"。

1. BOM 概述

BOM 的核心是 window 对象,它代表浏览器窗口,同时也是 JavaScript 的全局对象。所有全局 JavaScript 对象、函数和变量都自动成为 window 对象的成员。

2. window 对象

2.1 属性和方法

常用属性:

  • window.innerHeight - 浏览器窗口的内部高度
  • window.innerWidth - 浏览器窗口的内部宽度
  • window.outerHeight - 浏览器窗口的外部高度
  • window.outerWidth - 浏览器窗口的外部宽度
  • window.screenX, window.screenY - 窗口相对于屏幕的位置
  • window.pageXOffset, window.pageYOffset - 文档滚动的像素数
  • window.location - 用于获取当前页面地址和重定向
  • window.document - 对文档对象的引用
  • window.history - 提供对浏览器历史记录的访问
  • window.navigator - 提供浏览器相关信息
  • window.screen - 提供用户屏幕的信息
  • window.localStorage - 本地存储对象
  • window.sessionStorage - 会话存储对象

常用方法:

  • window.alert() - 显示带有一条消息和一个确认按钮的警告框
  • window.confirm() - 显示带有一条消息、确认和取消按钮的对话框
  • window.prompt() - 显示可提示用户输入的对话框
  • window.open() - 打开新窗口
  • window.close() - 关闭当前窗口
  • window.setTimeout() - 在指定的毫秒数后调用函数
  • window.setInterval() - 按照指定的周期(毫秒)调用函数
  • window.clearTimeout() - 取消由 setTimeout() 设置的 timeout
  • window.clearInterval() - 取消由 setInterval() 设置的 interval
  • window.scrollTo() - 滚动到文档中的特定位置
  • window.requestAnimationFrame() - 告诉浏览器希望执行动画并请求浏览器在下一次重绘之前调用指定的函数来更新动画

2.2 示例代码

// 获取窗口尺寸
console.log(`窗口内部宽度: ${window.innerWidth}, 高度: ${window.innerHeight}`);// 定时器
let timer = setTimeout(() => {console.log('3秒后执行');
}, 3000);// 清除定时器
// clearTimeout(timer);// 间隔定时器
let counter = 0;
let interval = setInterval(() => {console.log(`每秒执行一次 ${++counter}`);if (counter >= 5) clearInterval(interval);
}, 1000);// 滚动到指定位置
window.scrollTo(0, 500);// 动画帧
function animate() {// 动画逻辑requestAnimationFrame(animate);
}
requestAnimationFrame(animate);

3. location 对象

location 对象包含有关当前 URL 的信息。

3.1 属性和方法

属性:

  • location.href - 返回当前页面的完整 URL
  • location.protocol - 返回页面使用的协议 (http: 或 https:)
  • location.host - 返回主机名和端口号
  • location.hostname - 返回 web 主机的域名
  • location.port - 返回 web 主机的端口
  • location.pathname - 返回当前页面的路径和文件名
  • location.search - 返回 URL 的查询部分(从问号 ? 开始的 URL)
  • location.hash - 返回 URL 的锚部分(从 # 开始的 URL)

方法:

  • location.assign() - 加载新文档
  • location.reload() - 重新加载当前文档
  • location.replace() - 用新文档替换当前文档(不会在历史记录中生成新记录)

3.2 示例代码

// 获取当前URL信息
console.log(`当前URL: ${location.href}`);
console.log(`协议: ${location.protocol}`);
console.log(`主机: ${location.host}`);
console.log(`路径: ${location.pathname}`);
console.log(`查询参数: ${location.search}`);
console.log(`哈希值: ${location.hash}`);// 重定向到新页面
// location.assign('https://www.example.com');// 替换当前页面(不会在历史记录中留下记录)
// location.replace('https://www.example.com');// 重新加载页面
// location.reload(); // 可能从缓存加载
// location.reload(true); // 强制从服务器重新加载

4. history 对象

history 对象包含用户访问过的 URL。

4.1 属性和方法

属性:

  • history.length - 返回历史列表中的 URL 数量

方法:

  • history.back() - 加载历史列表中的前一个 URL
  • history.forward() - 加载历史列表中的下一个 URL
  • history.go() - 加载历史列表中的某个具体页面

4.2 示例代码

// 获取历史记录长度
console.log(`历史记录数量: ${history.length}`);// 导航到前一页
// history.back();// 导航到后一页
// history.forward();// 导航到特定位置
// history.go(-2); // 后退两页
// history.go(1);  // 前进一页

5. navigator 对象

navigator 对象包含有关浏览器的信息。

5.1 常用属性和方法

属性:

  • navigator.appName - 返回浏览器的名称
  • navigator.appVersion - 返回浏览器的平台和版本信息
  • navigator.userAgent - 返回由客户机发送服务器的 user-agent 头部的值
  • navigator.platform - 返回运行浏览器的操作系统平台
  • navigator.language - 返回浏览器的语言
  • navigator.onLine - 返回浏览器是否在线
  • navigator.geolocation - 返回一个 Geolocation 对象,可以访问设备的地理位置
  • navigator.cookieEnabled - 返回浏览器是否启用 cookie
  • navigator.hardwareConcurrency - 返回用户计算机可用的逻辑处理器核心数
  • navigator.deviceMemory - 返回设备内存大小(GB)

方法:

  • navigator.javaEnabled() - 返回浏览器是否启用 Java
  • navigator.sendBeacon() - 用于异步发送少量数据到服务器

5.2 示例代码

// 浏览器信息
console.log(`浏览器名称: ${navigator.appName}`);
console.log(`浏览器版本: ${navigator.appVersion}`);
console.log(`用户代理: ${navigator.userAgent}`);
console.log(`操作系统平台: ${navigator.platform}`);
console.log(`浏览器语言: ${navigator.language}`);
console.log(`是否在线: ${navigator.onLine}`);
console.log(`是否启用cookie: ${navigator.cookieEnabled}`);
console.log(`CPU核心数: ${navigator.hardwareConcurrency}`);
console.log(`设备内存: ${navigator.deviceMemory}GB`);// 地理位置
if (navigator.geolocation) {navigator.geolocation.getCurrentPosition((position) => {console.log(`纬度: ${position.coords.latitude}`);console.log(`经度: ${position.coords.longitude}`);},(error) => {console.error(`获取位置错误: ${error.message}`);});
} else {console.log('该浏览器不支持地理位置');
}// 发送Beacon数据
const data = { event: 'page_unload', time: Date.now() };
navigator.sendBeacon('/log', JSON.stringify(data));

6. screen 对象

screen 对象包含用户屏幕的信息。

6.1 常用属性

  • screen.width - 返回屏幕宽度(像素)
  • screen.height - 返回屏幕高度(像素)
  • screen.availWidth - 返回可用屏幕宽度(像素,减去界面特性如窗口任务栏)
  • screen.availHeight - 返回可用屏幕高度(像素,减去界面特性如窗口任务栏)
  • screen.colorDepth - 返回颜色深度(每像素的位数)
  • screen.pixelDepth - 返回屏幕的像素深度(每像素的位数)

6.2 示例代码

console.log(`屏幕宽度: ${screen.width}px`);
console.log(`屏幕高度: ${screen.height}px`);
console.log(`可用宽度: ${screen.availWidth}px`);
console.log(`可用高度: ${screen.availHeight}px`);
console.log(`颜色深度: ${screen.colorDepth}`);
console.log(`像素深度: ${screen.pixelDepth}`);

7. 存储对象

7.1 localStorage 和 sessionStorage

  • localStorage - 存储没有过期时间的数据
  • sessionStorage - 存储一个会话的数据(当浏览器标签页关闭时数据被删除)

方法:

  • setItem(key, value) - 存储键值对
  • getItem(key) - 获取指定键的值
  • removeItem(key) - 删除指定键
  • clear() - 清空所有存储
  • key(index) - 获取指定索引的键名

7.2 示例代码

// localStorage 示例
localStorage.setItem('username', 'john_doe');
console.log(localStorage.getItem('username')); // 输出: john_doe
localStorage.removeItem('username');// sessionStorage 示例
sessionStorage.setItem('session_token', 'abc123');
console.log(sessionStorage.getItem('session_token')); // 输出: abc123
sessionStorage.clear();// 存储对象
const user = { name: 'Alice', age: 25 };
localStorage.setItem('user', JSON.stringify(user));
const storedUser = JSON.parse(localStorage.getItem('user'));
console.log(storedUser.name); // 输出: Alice

8. 弹窗和对话框

8.1 常用方法

  • alert(message) - 显示警告对话框
  • confirm(message) - 显示确认对话框(返回 true/false)
  • prompt(message, default) - 显示提示用户输入的对话框(返回输入值或 null)

8.2 示例代码

// 警告框
alert('这是一个警告消息');// 确认框
const isConfirmed = confirm('你确定要继续吗?');
console.log(`用户选择: ${isConfirmed}`);// 提示框
const userName = prompt('请输入你的名字', '匿名用户');
console.log(`用户输入: ${userName}`);

9. 定时器

9.1 定时器方法

  • setTimeout(function, delay) - 在指定延迟后执行函数(返回定时器ID)
  • setInterval(function, interval) - 每隔指定时间重复执行函数(返回定时器ID)
  • clearTimeout(timeoutID) - 取消 setTimeout()
  • clearInterval(intervalID) - 取消 setInterval()

9.2 示例代码

// setTimeout 示例
const timeoutId = setTimeout(() => {console.log('这段代码将在3秒后执行');
}, 3000);// 取消定时器
// clearTimeout(timeoutId);// setInterval 示例
let counter = 0;
const intervalId = setInterval(() => {console.log(`计数器: ${++counter}`);if (counter >= 5) {clearInterval(intervalId);console.log('定时器已停止');}
}, 1000);

10. 总结

BOM 提供了丰富的 API 让 JavaScript 可以与浏览器交互,包括:

  1. 控制浏览器窗口(window)
  2. 操作 URL(location)
  3. 管理浏览历史(history)
  4. 获取浏览器信息(navigator)
  5. 获取屏幕信息(screen)
  6. 客户端存储(localStorage/sessionStorage)
  7. 显示对话框(alert/confirm/prompt)
  8. 定时任务(setTimeout/setInterval)

掌握 BOM 是前端开发的重要部分,它使得 JavaScript 能够创建丰富的交互式网页应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek生成流程图

通过DeepSeek生成代码 请用 Mermaid 语法生成一个电商订单处理流程的流程图,流程包括用户下单、订单审核、库存检查、生成发货单、发货以及各个环节可能出现的分支情况,如订单审核不通过返回修改,库存不足通知用户等 打开在线绘图 Flowchart…

WebGL与Three.js:从基础到应用的关系与原理解析

WebGL 和 Three.js 是现代网页中实现 3D 图形和动画的两大关键技术。尽管它们有着紧密的关系,但它们在功能和使用场景上有所不同。简单来说,WebGL 是一个底层图形库,提供了对计算机 GPU 的直接访问,而 Three.js 则是建立在 WebGL …

Spring Boot消息系统开发指南

消息系统基础概念 消息系统作为分布式架构的核心组件,实现了不同系统模块间的高效通信机制。其应用场景从即时通讯软件延伸至企业级应用集成,形成了现代软件架构中不可或缺的基础设施。 通信模式本质特征 同步通信要求收发双方必须同时在线交互&#…

JavaWeb笔记

六、MVC模式 ✅ Model(模型) 职责:处理数据和业务逻辑。 负责数据的存储、读取和操作。 包含业务规则和逻辑。 ✅ View(视图) 职责:展示界面和接收用户输入。 把数据以可视化的形式呈现给用户。 不处…

解决启动SpringBoot是报错Command line is too long的问题

文章目录 错误全称原因解决方法(一图到底) 错误全称 在启动springBoot项目时,会报错: Error running Application. Command line is too long. Shorten the command line via JAR manifest 原因 命令行太长的原因导致SpringBoot和…

DAY47打卡

DAY 47 注意力热图可视化 昨天代码中注意力热图的部分顺移至今天 知识点回顾:热力图(代码学习在day46天) 作业:对比不同卷积层热图可视化的结果 通道注意力热图的代码整体结构与核心功能 数据处理:对 CIFAR-10 数据集进…

Java在word中指定位置插入图片。

Java使用(Poi-tl) 在word(docx)中指定位置插入图片 Poi-tl 简介Maven 依赖配置Poi-tl 实现原理与步骤1. 模板标签规范2.完整实现代码3.效果展示 Poi-tl 简介 Poi-tl 是基于 Apache POI 的 Java 开源文档处理库,专注于…

迁移科技:破解纸箱拆垛场景的自动化升级密码

一、当传统拆垛遇上智能视觉:一场效率革命的必然选择 在汽车制造基地的物流中转区,每天有超过2万件零部件纸箱需要完成拆垛分拣。传统人工拆垛面临三大挑战: 效率瓶颈:熟练工人每小时处理量不超过200箱安全隐患:重型…

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…

AIStarter 4.0 苹果版体验评测|轻松部署 ComfyUI 与 DeepSeek 的 AI 工具箱

最近在测试一款名为 AIStarter 4.0 的 AI 工具管理平台,主要用于在 Mac 系统上快速部署各类开源 AI 项目,如 ComfyUI 和 DeepSeek ,非常适合开发者、设计师及 AI 入门者使用。 通过简单的拖拽操作即可完成安装,支持普通下载与网盘…

ArcGIS Pro 3.4 二次开发 - 图形图层

环境:ArcGIS Pro SDK 3.4 + .NET 8 文章目录 图形图层1.1 创建图形图层1.2 访问GraphicsLayer1.3 复制图形元素1.4 移除图形元素2 创建图形元素2.1 使用CIMGraphic创建点图形元素2.2 使用CIMGraphic创建线图元素2.3 使用 CIMGraphic 的多边形图形元素2.4 使用CIMGraphic创建多…

《广度优先搜索》题集

1、模板题集 聚合一块 2、课内题集 寻找图中是否存在路径 钥匙和房间 受限条件下可到达节点的数目 3、课后题集 最少操作数 社交网络新来的朋友 Ignatius and the Princess I Collect More Jewels Gap Nightmare Remainder Ferry Loading III 连连看 诡异的楼梯 Open the …

界面组件DevExpress WPF中文教程:Grid - 如何获取行句柄?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

零跑汽车5月交付45067台车,同比增长超148%

零跑汽车在5月交付新车45,067辆,同比大增148%,连续5个月实现单月交付量增长,稳居新势力交付量第一位置。今年1-5月,零跑累计交付新车达173,658辆,展现出强劲的市场竞争力和产品实力。 根据Q1财报,零跑不仅营…

netty中的粘包问题详解

一起来学netty 一、粘包问题的本质二、粘包问题的成因三、Netty中的解决方案1. 固定长度解码器(FixedLengthFrameDecoder)2. 行分隔符解码器(LineBasedFrameDecoder)3. 分隔符解码器(DelimiterBasedFrameDecoder)4. 长度字段解码器(LengthFieldBasedFrameDecoder)四、解…

【基础算法】枚举(普通枚举、二进制枚举)

文章目录 一、普通枚举1. 铺地毯(1) 解题思路(2) 代码实现 2. 回文日期(1) 解题思路思路一:暴力枚举思路二:枚举年份思路三:枚举月日 (2) 代码实现 3. 扫雷(2) 解题思路(2) 代码实现 二、二进制枚举1. 子集(1) 解题思路(2) 代码实现 2. 费解的…

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…

学习日记-day24-6.8

完成内容&#xff1a; 知识点&#xff1a; 1.网络编程_TCP编程 ### 编写客户端1.创建Socket对象,指明服务端的ip以及端口号 2.调用socket中的getOutputStream,往服务端发送请求 3.调用socket中的getInputStream,读取服务端响应回来的数据 4.关流public class Client {public…

JavaScript 核心对象深度解析:Math、Date 与 String

JavaScript 作为 Web 开发的核心语言&#xff0c;提供了丰富的内置对象来简化编程工作。本文将深入探讨三个重要的内置对象&#xff1a;Math、Date 和 String&#xff0c;通过详细的代码示例和综合案例帮助你全面掌握它们的用法。 一、Math 对象 Math 对象提供了一系列静态属…