Skip to content

B41. 浏览器 BOM 对象 & 数学模块

JavaScript 不仅能操作网页内容(DOM),还能与浏览器进行深度交互。BOM(Browser Object Model)就是浏览器为我们提供的对象模型,它让我们可以访问窗口、屏幕、历史记录等信息。与此同时,JavaScript 的 Math 模块也提供了丰富的数学运算功能。

1.1. window 对象:浏览器的“大管家”

同学们还记得用 Python 写的 print("Hello World") 吗?在网页中,如果想弹出一个对话框显示信息,就需要用到 window.alert()window 对象就像 JavaScript 的“大管家”,控制着浏览器窗口的一切行为!

1.1.1. 常用属性与方法

javascript
// 获取窗口宽高(包含滚动条)
console.log("窗口宽度:" + window.innerWidth);
console.log("窗口高度:" + window.innerHeight);

// 滚动到页面顶部
window.scrollTo(0, 0);

// 打开新窗口(注意广告拦截器可能拦截!)
window.open("https://example.com", "_blank");

WARNING

⚠️ 易错点
window.innerWidthscreen.width 容易混淆:前者是浏览器窗口的可视区域宽度,后者是屏幕物理分辨率的宽度。

1.2. screennavigator:获取设备和浏览器信息

为什么有些网站在手机上会显示手机版界面?这就要用到 screen 对象获取屏幕信息啦!再比如,如何知道用户用的是 Chrome 还是 Safari?navigator 对象来帮忙!

1.2.1. screen 对象

javascript
// 获取屏幕分辨率
console.log("屏幕宽度:" + screen.width);
console.log("屏幕高度:" + screen.height);

// 可用工作区域(扣除任务栏)
console.log("可用高度:" + screen.availHeight);

1.2.2. navigator 对象

javascript
// 识别浏览器类型
if (navigator.userAgent.includes("Chrome")) {
  console.log("你正在使用 Chrome 浏览器");
}

1.3. locationhistory:页面跳转与历史导航

有没有想过,点击“返回”按钮时浏览器做了什么?history.back() 就是答案!如果想让网页自动跳转到新地址,location.href 是最常用的方法。

1.3.1. location 对象

javascript
// 获取当前 URL
console.log("当前地址:" + location.href);

// 跳转到新页面(5秒后跳转)
setTimeout(() => {
  location.href = "https://newpage.com";
}, 5000);

TIP

📌 技巧提示

  • location.search:获取查询参数(如 ?id=123
  • location.hash:获取锚点部分(如 #section1

1.3.2. history 对象

javascript
// 返回上一页(等同于浏览器后退按钮)
history.back();

// 前进到下一页
history.forward();

// 跳转到最近的第三个历史记录
history.go(-3);

WARNING

⚠️ 易错点

  • location.replace() 不会在历史记录中留下当前页面,适合单向跳转;
  • location.href 会保留当前页面在历史记录中。

1.4. Math 模块:数学计算的工具箱

在 Python 中我们用 import math,而 JavaScript 的数学函数直接通过 Math 对象调用。模块化就像把工具分门别类放在工具箱里,要用的时候直接取!

1.4.1. 模块化的意义

  • 避免命名冲突(比如自己写的 random() 不会覆盖系统函数)
  • 代码复用更方便
  • 逻辑更清晰

1.5. Math 常用方法与常量

如何让网页上的小球随机移动?用 Math.random() 生成随机坐标!还记得圆周率 π 吗?直接用 Math.PI 就能获取。

1.5.1. 常用方法

Math.random() 返回 [0,1) 区间的随机数,所以要得到 [m, n] 之间的随机整数,需要使用 Math.floor(Math.random() * (n - m + 1)) + m

javascript
// 生成 1~10 的随机整数
let num = Math.floor(Math.random() * 10) + 1;

// 计算平方根
console.log(Math.sqrt(16)); // 输出 4

// 取绝对值
console.log(Math.abs(-5.8)); // 输出 5.8

1.5.2. 常用常量

javascript
console.log(Math.PI); // 圆周率 π ≈ 3.14159...
console.log(Math.E);  // 自然对数的底数 e ≈ 2.71828...

WARNING

⚠️ 易错点

  • Math.floor() 是向下取整
  • Math.ceil() 是向上取整
  • Math.round() 是四舍五入

别记混了!

📚 知识回顾

对象主要用途
window控制浏览器窗口、执行全局操作
screen获取设备屏幕信息
navigator获取浏览器信息(如 userAgent)
location管理页面地址(跳转、刷新)
history控制页面历史记录(前进、后退)
Math提供数学运算(随机数、平方根、圆周率等)

🧪 课后练习

✅ 基础题

  1. (选择)以下哪项可以获取浏览器的用户代理信息?

    • A. window.userAgent
    • B. navigator.userAgent
    • C. screen.userAgent
  2. (填空)生成 5~10 的随机整数:

    javascript
    Math.floor(Math.random() * ___) + ___

    → 答案:6 和 5

  3. (纠错)找出代码错误:

    javascript
    let url = location.address; // ❌ 错误!正确应为 location.href

🎯 项目题:制作一个“网页小助手”

要求

  1. 点击按钮显示当前窗口宽高
  2. 点击另一个按钮 3 秒后跳转到指定 URL
  3. 显示用户浏览器名称(提示:用 navigator.userAgent 分析)
  4. (拓展)用 Math.random() 实现背景色随机变化

HTML 示例结构

html
<button onclick="showWindowSize()">显示窗口大小</button>
<button onclick="redirectAfter3Sec('https://example.com')">3秒后跳转</button>
<p id="browser-info">浏览器信息</p>
<div id="random-bg" style="width: 100%; height: 100px;"></div>

JavaScript 示例逻辑

javascript
function showWindowSize() {
  alert(`窗口尺寸:${window.innerWidth} x ${window.innerHeight}`);
}

function redirectAfter3Sec(url) {
  setTimeout(() => {
    window.location.href = url;
  }, 3000);
}

function detectBrowser() {
  const ua = navigator.userAgent;
  let browser = "未知浏览器";

  if (ua.includes("Firefox")) {
    browser = "Mozilla Firefox";
  } else if (ua.includes("Edg")) {
    browser = "Microsoft Edge";
  } else if (ua.includes("Chrome")) {
    browser = "Google Chrome";
  }

  document.getElementById("browser-info").innerText = `你正在使用:${browser}`;
}

function randomColor() {
  const r = Math.floor(Math.random() * 256);
  const g = Math.floor(Math.random() * 256);
  const b = Math.floor(Math.random() * 256);
  return `rgb(${r}, ${g}, ${b})`;
}

function changeBackgroundColor() {
  const div = document.getElementById("random-bg");
  div.style.backgroundColor = randomColor();
}

// 页面加载时检测浏览器
window.onload = detectBrowser;

INFO

💡 提示:使用 setInterval(changeBackgroundColor, 1000) 可实现每秒变换背景色的动态效果。

Built by Vitepress | Apache 2.0 Licensed