JavaScript入门⑩|BOM与浏览器对象,localStorage_位置_历史记录


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 重复定时器

八、课后作业

  1. localStorage 实现一个页面访问计数器,刷新页面后显示访问次数
  2. sessionStorage 实现一个表单草稿保存功能(输入内容后刷新页面不丢失)
  3. navigator.onLine 监听网络状态变化,断网时显示提示

有问题欢迎评论区留言,大家一起讨论!


标签:JavaScript | BOM | localStorage | sessionStorage | location | navigator | history | 前端入门

相关推荐
会飞的拖把2 小时前
Python文件操作详解:从文件读写到os、shutil模块实战
开发语言·python
RS迷途小书童2 小时前
Python 解析大疆无人机 SRT 字幕日志
开发语言·python·无人机
知兀2 小时前
框架脚手架搭建,推送github一键使用
javascript·vue.js·ecmascript
点心的游戏开发世界2 小时前
GDScript 入门笔记(十六):文件读写与数据持久化
开发语言·笔记·游戏引擎·godot
会飞的拖把2 小时前
Python序列详解:列表、元组、字符串的通用操作(超详细版)
开发语言·windows·python
mayaairi2 小时前
Vue2 实战进阶:表单数据收集、指令系统与自定义指令全解析
前端·javascript·vue.js
reasonsummer3 小时前
【办公类-115-01】20260906育儿知识(家园小报)批量制作(2026年9月-2027年6月)
开发语言·数据库·c#
君顾13 小时前
智慧场馆解决方案小程序系统实战:从架构设计到上线指南
java·开发语言·智慧场馆
zhougl9963 小时前
Dockerfile实战教程
java·开发语言·spring boot
FfHUCisI3 小时前
Golang 网络轮询器 netpoll:把阻塞 IO 变成事件通知
开发语言·网络·golang