author: 专注前端开发,分享JavaScript干货
title: JavaScript入门⑩|BOM与浏览器对象,localStorage_位置_历史记录
update: 2026-04-28
tags: JavaScript,BOM,localStorage,sessionStorage,location,navigator,history,前端入门
作者:专注前端开发,分享JavaScript干货
更新时间:2026年4月
适合人群:掌握DOM操作,想了解浏览器对象模型的开发者
前言:BOM是什么?
DOM操作网页内容,BOM(Browser Object Model)操作浏览器本身。
BOM包含:window、navigator、location、history、screen、localStorage等。
一、window 对象
window 是浏览器窗口的全局对象,所有全局变量和函数都是它的属性/方法。
javascript
// 全局变量实际上是window的属性
var name = "张三";
console.log(window.name); // "张三"
// 常用window方法
window.alert("提示"); // 弹窗
window.confirm("确定删除?"); // 确认框,返回true/false
window.prompt("请输入:"); // 输入框
// 窗口尺寸
console.log(window.innerWidth); // 可视区宽度(不含工具栏)
console.log(window.innerHeight); // 可视区高度
console.log(window.outerWidth); // 整个浏览器宽度
console.log(window.outerHeight); // 整个浏览器高度
// 窗口操作
window.open("https://example.com"); // 打开新窗口
window.close(); // 关闭窗口
// 定时器
const timeoutId = setTimeout(() => console.log("1秒后"), 1000);
const intervalId = setInterval(() => console.log("每秒"), 1000);
// 清除定时器
clearTimeout(timeoutId);
clearInterval(intervalId);
二、navigator 对象(浏览器信息)
javascript
// 用户代理字符串(浏览器识别)
console.log(navigator.userAgent);
// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...
// 浏览器名称和版本
console.log(navigator.appName); // "Netscape"
console.log(navigator.appVersion);
console.log(navigator.appCodeName);
// 操作系统
console.log(navigator.platform); // "Win32"
// 语言
console.log(navigator.language); // "zh-CN"
console.log(navigator.languages); // ["zh-CN", "zh", "en"]
// 是否联网
console.log(navigator.onLine);
// 是否启用了Cookie
console.log(navigator.cookieEnabled);
// 检测移动端
const isMobile = /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
console.log("是否移动端:", isMobile);
// 剪贴板访问(需要用户授权)
async function copyToClipboard(text) {
try {
await navigator.clipboard.writeText(text);
console.log("复制成功!");
} catch (error) {
console.error("复制失败:", error);
}
}
三、location 对象(URL信息)
javascript
// URL解析
console.log(location.href); // 完整URL
console.log(location.protocol); // "https:"
console.log(location.host); // "www.example.com"
console.log(location.hostname); // "www.example.com"
console.log(location.port); // "8080"
console.log(location.pathname); // "/path/to/page"
console.log(location.search); // "?id=123&name=test"
console.log(location.hash); // "#section"
// 解析URL参数
const params = new URLSearchParams(location.search);
console.log(params.get("id")); // "123"
console.log(params.get("name")); // "test"
// 修改URL(不刷新页面)
history.pushState(null, "", "/new-page"); // 添加历史记录
history.replaceState(null, "", "/another"); // 替换当前记录
// 页面跳转
location.href = "https://example.com"; // 跳转(产生历史记录)
location.assign("https://example.com"); // 同上
location.replace("https://example.com"); // 替换(不产生历史记录)
location.reload(); // 刷新页面
location.reload(true); // 强制从服务器刷新(Ctrl+F5)
四、history 对象(浏览历史)
javascript
// 历史记录数量
console.log(history.length);
// 前进后退
history.back(); // 后退一页(等同浏览器后退按钮)
history.forward(); // 前进一页
history.go(-2); // 后退两页
history.go(1); // 前进一页
// pushState / replaceState(不刷新页面的路由)
history.pushState({ page: 1 }, "", "/page1");
history.pushState({ page: 2 }, "", "/page2");
history.pushState({ page: 3 }, "", "/page3");
// 监听浏览器前进后退(popstate事件)
window.addEventListener("popstate", (event) => {
console.log("当前state:", event.state);
// 根据state更新页面内容
});
五、localStorage 与 sessionStorage
5.1 localStorage(持久存储)
javascript
// 存储数据(键值对,值必须是字符串)
localStorage.setItem("username", "张三");
localStorage.setItem("age", "25"); // 数字会自动转字符串
// 读取数据
const name = localStorage.getItem("username");
console.log(name); // "张三"
// 删除数据
localStorage.removeItem("username"); // 删除单个
localStorage.clear(); // 清空全部
// 存储对象(需要序列化)
const user = { name: "张三", age: 25 };
localStorage.setItem("user", JSON.stringify(user));
const stored = JSON.parse(localStorage.getItem("user"));
console.log(stored.name); // "张三"
// 存储数组
const fruits = ["苹果", "香蕉", "橙子"];
localStorage.setItem("fruits", JSON.stringify(fruits));
console.log(JSON.parse(localStorage.getItem("fruits"))); // ["苹果", "香蕉", "橙子"]
5.2 sessionStorage(会话存储)
javascript
// 与localStorage用法完全相同
sessionStorage.setItem("temp", "临时数据");
// 区别:sessionStorage在浏览器关闭后自动清除
// localStorage 永久保存(除非手动清除)
console.log(sessionStorage.getItem("temp"));
5.3 存储事件监听(跨标签页通信)
javascript
// 当localStorage在别的标签页被修改时触发
window.addEventListener("storage", (event) => {
console.log("修改的键:", event.key);
console.log("旧值:", event.oldValue);
console.log("新值:", event.newValue);
console.log("来源:", event.url);
});
六、实战:用户偏好设置存储
javascript
class SettingsStore {
constructor(prefix = "app_") {
this.prefix = prefix;
}
set(key, value) {
const fullKey = this.prefix + key;
const data = typeof value === "object"
? JSON.stringify(value)
: String(value);
localStorage.setItem(fullKey, data);
}
get(key, defaultValue = null) {
const fullKey = this.prefix + key;
const data = localStorage.getItem(fullKey);
if (data === null) return defaultValue;
try {
return JSON.parse(data);
} catch {
return data;
}
}
remove(key) {
localStorage.removeItem(this.prefix + key);
}
clear() {
const keys = Object.keys(localStorage);
keys.forEach(key => {
if (key.startsWith(this.prefix)) {
localStorage.removeItem(key);
}
});
}
}
// 使用
const store = new SettingsStore("user_");
// 保存用户设置
store.set("theme", "dark");
store.set("fontSize", 16);
store.set("userInfo", { name: "张三", email: "zhang@example.com" });
// 读取
console.log(store.get("theme")); // "dark"
console.log(store.get("fontSize")); // "16"
console.log(store.get("userInfo")); // { name: "张三", email: "zhang@example.com" }
console.log(store.get("notExist", "默认值")); // "默认值"
七、知识卡
| 对象 | 作用 |
|---|---|
window |
浏览器窗口,全局对象 |
navigator |
浏览器信息、在线状态 |
location |
URL信息、页面跳转 |
history |
浏览历史、路由 |
localStorage |
持久存储(不主动清除一直存在) |
sessionStorage |
会话存储(关闭浏览器后清除) |
setTimeout |
一次性定时器 |
setInterval |
重复定时器 |
八、课后作业
- 用
localStorage实现一个页面访问计数器,刷新页面后显示访问次数 - 用
sessionStorage实现一个表单草稿保存功能(输入内容后刷新页面不丢失) - 用
navigator.onLine监听网络状态变化,断网时显示提示
有问题欢迎评论区留言,大家一起讨论!
标签:JavaScript | BOM | localStorage | sessionStorage | location | navigator | history | 前端入门